刚学1个多月的小白,比着《150讲轻松搞定Python网络爬虫》后面的selenium实战做的
结果卡在《实战-查找余票》这里了
原视频中很轻松的就完成了北京-长沙的查询,我这却卡在出发日这里,只要是用selenium选择出发日,就会变成不在预售时间内,然后打开出发日选择框,发现全是NAN(如图)
如果不用selenium,或者是手动刷新下selenium打开的出发日页面,都可以正常选择查询,研究一天了也没明白啥情况
个人怀疑是12306的反爬?想用行为链模拟下手动操作,结果也不太懂没搞出来,闷了2天了郁闷死了,求解!
下面是根据《150讲轻松搞定Python网络爬虫》-《实战-查找余票》截止的代码,视频中完全可以运行。
import csv
import time
import selenium.webdriver.common.action_chains
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome(executable_path="D:\Chrome and selenium\chromedriver_win32\chromedriver.exe")
class trainspider(object):
login_url='https://kyfw.12306.cn/otn/resources/login.html'
personal_url='https://kyfw.12306.cn/otn/view/index.html'
left_ticket_url='https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc'
#初始化类的所有数据
def __init__(self,from_station,to_station,train_date):
self.from_station=from_station
self.to_station=to_station
self.train_date=train_date
# 创建字典,将键值与代号对应
self.station_codes={}
#初始化站点所对应的代号
self.init_station_code()
def init_station_code(self):
with open('stations.csv', 'r', encoding='utf-8') as fp:
reader = csv.DictReader(fp)
for line in reader:
name = line['name']
code = line['code']
self.station_codes[name] = code
def login(self):
driver.get(self.login_url)
WebDriverWait(driver,1000).until(
EC.url_contains(self.personal_url)
)
print('登陆成功啦!')
def search_left_ticket(self):
driver.get(self.left_ticket_url)
#点掉疫情弹窗
warning_btn=driver.find_element_by_id('qd_closeDefaultWarningWindowDialog_id')
warning_btn.click()
#出发地
from_station_input=driver.find_element_by_id('fromStation')
from_station_code=self.station_codes[self.from_station]
driver.execute_script("arguments[0].value='%s'"%from_station_code,from_station_input)
print(self.from_station,from_station_code)
#目的地
to_station_input=driver.find_element_by_id('toStation')
to_station_code=self.station_codes[self.to_station]
driver.execute_script("arguments[0].value='%s'"%to_station_code,to_station_input)
print(self.to_station,to_station_code)
#出发时间
train_date_input=driver.find_element_by_id('train_date')
driver.execute_script("arguments[0].value='%s'"%self.train_date,train_date_input)
#点击查询
search_btn=driver.find_element_by_id('query_ticket')
search_btn.click()
def run(self):
self.login()
self.search_left_ticket()
def main():
spider=trainspider('北京','长沙','2021-6-12')
spider.run()
if __name__ == '__main__':
main()
driver = webdriver.Chrome(executable_path="D:\Chrome and selenium\chromedriver_win32\chromedriver.exe")
这行代码的路径符合你自己的路径吗,你是不是直接按教程写的。
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632