【问题标题】:Is it possible to "transfer" a session between selenium.webdriver and requests.session是否可以在 selenium.webdriver 和 requests.session 之间“传输”会话
【发布时间】:2015-12-14 20:02:59
【问题描述】:

理论上,如果我将 selenium 的 webdriver 对象中的所有 cookie 复制到 requests.Session 对象,请求是否能够像会话没有中断一样继续进行?

具体来说,我有兴趣编写自动化程序,通过 selenium 到达网页上的特定位置,然后将某个下载链接传递给 requests,该链接将下载并验证文件中的特定字节,有时还有完整的文件。 (下载文件的值会根据我在 selenium 中的交互而改变)

【问题讨论】:

    标签: python session selenium browser python-requests


    【解决方案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,请查看我上面的评论。如果这没有帮助,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多