结缘爬虫-(一)
某个项目中,需要爬虫去获取某个航空公司网站的数据,为了偷懒,我选择了 seleinum来模拟浏览器操作来直接获取有需要数据的网页。
使用一开始,我分别下载好了geckodriver(火狐)和chromedriver(谷歌)两个浏览器驱动,
from selenium import Webdriver driver = Webdriver.Firefox(“/path/to/geckodriver”) # 打开浏览器 #driver = Webdriver.Chrome("/path/to/chromedriver") #由于我把geckodirver.chromedriver放到python36/Scripts下,可以直接使用Webdirver.Firefox(),chrome类似 driver.get("https://www.baidu.com") # 请求网址
但使用时chromedriver成功打开了火狐浏览器,而geckodriver却打开失败了。是geckodriver失效了还是seleinum更新了?去官网查询了一番,原来下载的浏览器驱动要与自己的浏览器版本相匹配。重新下载后,可以成功打开了,敲代码推进度。
from selenium import Webdriver driver = Webdriver.Firefox() driver.get("http://") driver.find_element_by_id("name of id").click() # 点击事件 driver.send_keys("data") # 输入数据 ... driver.find_element_by_id("buttom name of id").click() # 点击事件 driver.close()
程序完成了,开始测试,打开网站,没问题,点击,输入,也没问题,然后点击查询。。。网页不动了???关掉后,多次重试,中间都没问题,就是一直卡在提交页面中。反复检查代码,代码所执行的事件包括点击查询都成功执行了,为何还是在最后面时,网页无响应呢?
经过请教大佬,原来是这样 的。浏览器有个配置“mix content/已阻止载入混合活动内容”,即当网页是https时,但网页中的一些资源却是使用http方式请求时,就会触发这个警告。使用selenium启动浏览器时,通常是使用浏览器的原始默认配置,原始配置会默认开启那个配置。这样selenium就会无法继续下去了。解决问题的办法就是selenium启动驱动时带上浏览器配置(浏览器正常安装时,会自动更改成为适合本机的配置,不再是原始默认配置,至于浏览器默认配置文件,自己网上找吧)。
1 p_dir = r"C:\Users\Administrator\AppData\Roaming\Mozilla\Firefox\Profiles\nrqq49p5.default" 2 3 p_file = webdriver.FirefoxProfile(p_dir) 4 5 driver = webdriver.Firefox(p_file) 6 7 driver.get("https://")
更改代码,再次运行,成了。
一点一点记录,一点一点成长