笔者使用的系统是linux ubuntu,最近在学习爬虫的过程中遇到了一个抓狂的问题,我尝试使用selenium加phantomjs来登陆网页的时候,Pythony一直提示selenium无法找到元素,不管我怎样修改定位的方法,永远出现No such elements的错误,让我几乎抓狂。再确认了测试了好几遍编写的代码后,我将程序出现的错误定位在了其中这几行代码里面
>>> from selenium import webdriver >>> driver = webdriver.PhantomJS() >>> driver.get("http://weibo.com")
正常情况下,这三行无比简单的代码是不可能有错的,但是事实告诉我错就在这里。
>>> driver.page_source '<html><head></head><body></body></html>'
我尝试查看网页的源码,结果出来的就只有这些,新浪主页就这点东西???
>>> driver.get("asfgsdagshgdfh") >>> driver.page_source '<html><head></head><body></body></html>'
接下来我尝试乱输了一堆字符进去,查看源代码,还是这堆东西,这就让我比较抓狂了。随便输都是这样,那代表我安装的phantomjs浏览器是无法访问网页的,在按照网上的方法重新安装了最新的phantomojs后,结果还是这样,来来回回重装了N次,丝毫没有作用,折腾了一个下午也没有出结果
>>> driver.get("http://news.sina.com.cn/") dri >>> len(driver.page_source) 584412 >>>
再然后我不报希望的测试其它网页,百度,微博都是不行的,但新浪网反而可以访问,刚开始我觉得问题可能是出在网页的设置上,在更改了浏览器的headers之后还是无法访问,又经过几次尝试和归类,总结出这家伙其实是不能访问https开头的网址,http是超文本传输协议,s是ssl加密,https就是http加ssl,这就意味着我其实是不能访问经过ssl加密后的http网站。得到了这个结论之后,我开始在寻找解决的方法,在翻遍了国内各大网站无果后,我在国外的一个论坛发现了解决的办法。
driver=webdriver.PhantomJS(service_args=['--ssl-protocol=any']) or driver = webdriver.PhantomJS( service_args=['--ignore-ssl-errors=true'])
就这么一行简单的代码。
其实phantomjs的参数是可以在构造时设定的,我无法访问https的网站就是因为参数错了,在创建浏览器对象时将ssl的属性设置为any就可以解决。