python - 如何在 Selenium 中使用相同的会话
问题描述
我正在使用 python 和 selenium 开发一个scrapy程序。在采取任何行动之前,我要抓取的网站需要登录。每次它要求我在运行程序时登录我的帐户。我发现通过添加 cookie 可以让浏览器记住我的会话,但不幸的是它仍然无法登录。任何人都可以指导代码吗?谢谢
我的代码:
import pickle
import time
from selenium import webdriver
PATH = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)
#product URL
driver.get("www.//xxx123.com/xxx")
driver.add_cookie({'domain': '.xxx123.com', 'expiry': 1677743964, 'httpOnly': False, 'name': '_ga','path': '/', 'secure': False, 'value': 'GA1.1.203675790.1614671945'})
解决方案
当您使用 Chrome 驱动程序时,您应该知道,每次启动它时,它都会创建一个临时配置文件,当您关闭它时会删除该配置文件。
根据您尝试抓取的网页,从 cookie 中恢复会话数据可能是一个挑战。首先创建配置文件并重新使用它可能更容易,只要它允许您用于持久性目的。
options = webdriver.ChromeOptions()
options.add_argument("user-data-dir=C:\\Path") #Path to your chrome profile
driver = webdriver.Chrome(executable_path="C:\\Program Files (x86)\\chromedriver.exe", chrome_options=options)
您的 Chrome 配置文件的路径应该在此处可用:chrome://version/
根据我的经验,最好创建一个为您处理登录的方法。尝试检测登录页面中的元素;如果它不存在,请照常进行。如果是,请执行登录。
推荐阅读
- python - 进行字典搜索的最佳方法
- python - 如何在 Python 中使用 Selenium 单击图像?
- android - 是否可以信任自签名根证书而不匹配公用名和主机名?
- load - 我无法在 ipython 上加载 .py 文件的可能原因
- amazon-ec2 - 启动集群时如何指定主节点的磁盘空间(卷大小)?
- spring - 所有呼叫完成后如何使用 Spring WebClient 进行非阻塞呼叫和发送电子邮件?
- sip - kamailio - 修改传入邀请的 URI
- c++ - C++ 优化 - 堆栈分配的数组类型与外部链接维度?
- ios - 在 Swift 中隐藏(跳过)print() 和 debugPrint() 的方法
- c - 我正在尝试用 c++ 编写 csgo 代码,但它不起作用