结缘爬虫-(一)

某个项目中,需要爬虫去获取某个航空公司网站的数据,为了偷懒,我选择了 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://")

更改代码,再次运行,成了。

posted on 2018-07-15 22:00  悄然而来  阅读(95)  评论(0编辑  收藏  举报

导航