是否可以在 selenium.webdriver 和 requests.session 之间“传输”会话
Posted
技术标签:
【中文标题】是否可以在 selenium.webdriver 和 requests.session 之间“传输”会话【英文标题】:Is it possible to "transfer" a session between selenium.webdriver and requests.session 【发布时间】:2015-12-14 20:02:59 【问题描述】:理论上,如果我将 selenium 的 webdriver
对象中的所有 cookie 复制到 requests.Session
对象,请求是否能够像会话没有中断一样继续进行?
具体来说,我有兴趣编写自动化程序,通过 selenium 到达网页上的特定位置,然后将某个下载链接传递给 requests
,该链接将下载并验证文件中的特定字节,有时还有完整的文件。 (下载文件的值会根据我在 selenium 中的交互而改变)
【问题讨论】:
【参考方案1】:是的,它肯定会起作用。以下代码 sn-p 也应该有所帮助 -
headers =
"User-Agent":
"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/44.0.2403.157 Safari/537.36"
s = requests.session()
s.headers.update(headers)
for cookie in driver.get_cookies():
c = cookie['name']: cookie['value']
s.cookies.update(c)
【讨论】:
更新我的答案。标头仅用于发送任何额外的标头,大多数网站都需要流行浏览器的用户代理字符串。 也许将最后三行替换为:s.cookies.update( c['name']:c['value'] for c in driver.get_cookies() )
它会反过来工作吗,你能用请求会话启动一个 selenium 浏览器吗?
@EndermanAPM,是的。但是 Selenium Webdriver 有一个限制,您只能为当前域添加 cookie。所以你的代码应该有以下流程 - 使用 selenium 打开网页,使用 Webdriver 添加 cookie,再次打开网页,它会工作。
@BurakhanAksoy,请查看我上面的评论。如果这没有帮助,请告诉我。以上是关于是否可以在 selenium.webdriver 和 requests.session 之间“传输”会话的主要内容,如果未能解决你的问题,请参考以下文章
是否可以通过 selenium webdriver 执行 OnClick javascript 函数而无需单击
如何使用selenium Webdriver验证页面中是否存在重复文本
你的回答“用selenium webdriver来判断一个网页加载完毕”,如何用加载超时报异常来确定是否加载完毕?
是否存在无法检测到的 Selenium WebDriver 版本?