selenium 问题,第1张

selenium 问题,第2张

受导师要求,小的最近在爬百度知道上的问题= =遇到一点小问题,所以来求教大 V 们
大家都了解百度的尿性,他的防蔽屏手段就是用 js 把搞乱的文字解析回来,具体原理我也没弄明白,于是就想直接解析他的 js ,然后就出现了一点小问题
当我对于一个问题反复请求时就会触发屏蔽机制,得到如下的字符串

A. 风化作用——冰川 U 形谷 B 沪弧高旧薨搅胳些供氓. 侵蚀作用——喀斯特地貌 C. 搬运作用——沙丘、戈壁 D. 沉积作用——河流、峡谷

可见他把字符搞乱了,此外我还发现过语句顺序方面的错误,或者 404 ,而这些在加载 js 的时候页面显示是正常的。

然后我用 selenium 解析,我尝试 100 次,但是在这 100 次中第一次总是乱码,跟没解析一样,之后都正常

0 A. 风化作用——冰川 U 形谷 B 沪弧高旧薨搅胳些供氓. 侵蚀作用——喀斯特地貌 C. 搬运作用——沙丘、戈壁 D. 沉积作用——河流、峡谷
1 A. 风化作用——冰川 U 形谷 B. 侵蚀作用——喀斯特地貌 C. 搬运作用——沙丘、戈壁 D. 沉积作用——河流、峡谷

但是我总不能在爬的时候对一个链接都访问两次啊,,求各位大神指教啊!!!
我的代码
driver = webdriver.PhantomJS(desired_capabilities=dcap)
for i in range(100):
driver.get("http://zhidao.baidu.com/question/1819540104107061868.html")
with open(str(i)+'.html', 'w') as f:
f.write(driver.page_source)
try:
print i, driver.find_element_by_xpath('//*[@id="question-content"]/div/div').text
except Exception, e:
print driver.current_url
time.sleep(1)
driver.quit() ----------------------- 以下是精选回复-----------------------

答:为什么不能都访问两次
答:如果有强迫症的话建议,进入百度的服务器,看看他的判断逻辑是什么,再先办法绕过。
答:怎么简单怎么来啊。
答:但是在这 100 次中第一次总是乱码,跟没解析一样,之后都正常。。。

应该可以设置默认页面编码的。
答:有 docker 版本的可以用,能直接通过 api 来调
答:我是这样理解的,百度的 js 对系统的默认解码算法进行了一下修改,导致在没有 js 的时候默认的解码算法出来的是乱七八糟的文字,所以我觉得你的是 selenium 第一次请求时, js 还未请求下来执行,而第二次有了第一次的缓存,所以未乱码。
你可以设置 implicitly_wait 多等待一下看下情况,或者你将 webdriver 换成 firefox , 这样你可以通过调试工具看是否有资源未被加载完。
答:代码还是格式化一下, markdown 规则

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » selenium 问题

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情