Message: Browsing context has been discarded
这是一个稀里糊涂的错误,有时候会无缘无故冒出来。据网上的消息说,是原先的内容已经不在了导致的...
没有找到解决办法,这种错误有时候又会消失....嗯,很奇怪
填入文本框的速度太慢
用火狐浏览器当driver的时候,它自带的方法.send_keys()每秒只能输入几千个字符串;
当要模拟输入的字符串有短短的几十万个时,就会卡在这几分钟,这是完全不能接受的。要知道,手动复制粘贴到同样位置都是能瞬间完成的。
网上提供的方法大致有两个:1.send_keys() ;2.通过js设置textarea或者innerText的内容。
实际测试表明,后者也没有用。后者在设置时是有效的,能看见框里有文本,但提交文本后,真正提交上去的内容仍然是空的。
经过无数次测试和研究,发现先通过js设置文本,再通过.send_keys()方法传入任何字符串(比如一个空字符“ ”),就能解决这个问题。
示例:
d = webdriver.Firefox()
...
d.find_element(*text_area_locator).clear() # 清空原文本框 js = '$("textarea").val("%s");'%content # content:要输入的内容 d.execute_script(js) # 通过js改变textarea内容 time.sleep(1) # 等待1秒,防止浏览器响应跟不上程序 d.find_element(*text_area_locator).send_keys(' ') # 发送一个空格
容易找不到某个iframe或者iframe内的元素
暂无解决方法,可能是日志文件的影响,可以删掉geckodriver.log或者用稳定的无界面模式(headless)试试。
geckodriver无界面(headless)能够绕过一些网站的检测,稳定性比有界面高
有的网站用无界面的Chromedriver会被防火墙识别,但是换成无界面的火狐浏览器就识别不出来。
默认下载路径的设置:使用Options.set_preference('driver.download.dir', 绝对路径)
设置默认下载路径要用绝对路径,因为程序是通过火狐读取配置文件实现的配置,你填的相对路径会变成配置文件对应的相对路径,所以没有对应相对路径文件夹时你的设置就会失效,变成默认的下载路径。
日志文件会影响浏览器的行为,有时候会直接跳过一些操作,导致错误或者阻塞
原因未知,反正删掉日志文件这个症状就好了。
总体评价:geckodriver不稳定,但方便绕过检测、对浏览器版本没有要求。鸡肋,食之无味弃之可惜。如果情况不是很特殊,建议用稳定的Chromedriver,但用Chrome也对应着 版本不同 会出暗错(找不到明明出现的元素)或无法运行的弊端。
标签:浏览器,Python,selenium,send,js,keys,设置,界面,缺陷 From: https://www.cnblogs.com/roundfish/p/16716958.html