我的方案是关闭chrome浏览器并打开一个新浏览器.
public String openNewBrowserWindow() {
this.log("Opening new Browser window...");
String stringHandles;
Set<String> previousWindows = driver.getWindowHandles();
String previousHandle = driver.getWindowHandle();
((JavascriptExecutor)driver).executeScript("window.open();");
Set<String> newWindows = driver.getWindowHandles();
newWindows.removeAll(previousWindows);
String newHandle = ((String)newWindows.toArray()[0]);
stringHandles = previousHandle + ";" + newHandle;
return stringHandles;
}
Run Code Online (Sandbox Code Playgroud)
我做的是这样的:
String handlesA = generic.openNewBrowserWindow();
String[] handleA = handlesA.split(";");
generic.closeBrowser();
generic.switchToWindow(handleA[1]);
Run Code Online (Sandbox Code Playgroud)
这适用于Firefox,但不适用于chrome.你们有什么建议吗?
我有一个测试用例,其中用户关闭浏览器并重新打开它,以测试某些登录 cookie 是否已正确加载。
browser.get("domain1.com")
cookies_domain1 = browser.get_cookies()
browser.get("domain2.com")
cookies_domain2 = browser.get_cookies()
//close browser
//re-open browser
browser.get("domain1.com")
for cookie in cookies_domain1:
driver.add_cookie(cookie)
browser.get("domain2.com")
for cookie in cookies_domain2:
driver.add_cookie(cookie)
Run Code Online (Sandbox Code Playgroud)
但这看起来不太好。我需要在打开页面之前加载cookie。Selenium 似乎只允许将 cookie 从一个页面添加到该页面!
我尝试执行此操作的另一种方法是保存browser.profile.path目录,备份它,然后在重新连接时将其传递给 a FirefoxProfile,该目录将传递给 a webdriver.Firefox(FirefoxProfile(path_to_directory_backup))。不幸的是,这似乎并没有保存cookie。
我需要在两台计算机之间转移我的Selenium会话。
要通过Selenium导出和导入cookie,您必须分别访问每个网站,然后才能设置其cookie,我想避免这种情况。我也想复制本地存储。
到目前为止,这是我尝试过的方法:
1-启动新的Selenium会话:
driver = webdriver.Chrome()
Run Code Online (Sandbox Code Playgroud)
2-在%temp%中找到其临时Chrome用户配置文件,并将其复制到我的应用程序的文件夹中
3-使用此用户配置文件启动新驱动程序:
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("user-data-dir=C:\\profiles\\temp_profile")
driver = webdriver.Chrome(chrome_options=chrome_options)
Run Code Online (Sandbox Code Playgroud)
上面的作品-本地存储和cookie仍在我的本地PC上,但是,当我将此用户配置文件复制到另一台PC并启动它时,本地存储仍然存在,但cookie消失了。
我还使用常规的chrome配置文件尝试了相同的操作,并尝试直接在Chrome中而不是在Selenium中启动用户配置文件,并且cookie仍然消失了。
为了保存 chromedriver 会话,我使用了以下代码片段:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('user-data-dir= path to where to save session')
driver = webdriver.Chrome(executable_path='path to chromedriver.exe', chrome_options=options)
Run Code Online (Sandbox Code Playgroud)
我尝试用 Firefox 做同样的事情,但似乎不起作用:
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
options = Options()
options.add_argument('user-data-dir= path to where to save session')
driver = webdriver.Firefox(executable_path='path to geckodriver.exe', firefox_options=options)
Run Code Online (Sandbox Code Playgroud)
这是正确的方法还是我错过了什么?
我有一个带有cookie的泡菜,我通过以下命令创建
def doLogin(driver):
#do login stuff
pickle.dump(driver.get_cookies(), open("cookies.pkl", "wb"))
Run Code Online (Sandbox Code Playgroud)
我有示例代码来获取cookie
driver = webdriver.PhantomJS()
self.doLogin(driver)
driver.delete_all_cookies()
for cookie in pickle.load(open("cookies.pkl", "rb")):
driver.add_cookie(cookie)
Run Code Online (Sandbox Code Playgroud)
我可以看到它很好地创建了cookie,因为如果我print没关系,add_cookie()正在做阴影的事情
这给出了以下例外
WebDriverException:消息:{"errorMessage":"无法设置Cookie","请求":{"headers":{"Accept":"application/json","Accept-Encoding":"identity","Connection": "接近", "内容长度": "219", "内容类型": "应用/ JSON;字符集= UTF-8", "主机": "127.0.0.1:50738","User-Agent": "Python-urllib/2.7"},"httpVersion":"1.1","method":"POST","post":"{\"sessionId \":\"391db430-154a-11e6-8a0a-ef59204729f5 \" ,"cookie":{\"domain \":\"secretWebsite \",\"name \":\"JSESSIONID \",\"value \":\"8332B6099FA3BBBC82893D4C7E6E918B \",\"path \": \"也是一个秘密\",\"httponly \":false,\"secure \":true}}","url":"/ cookie","urlParsed":{"anchor":"","查询":"", "文件": "曲奇", "目录": "/", "路径": "/曲奇", "相对": "/曲奇", "口": "", "主机": "", "密码": "", "用户": "", "用户信息": "", "权威": "", "协议": "", "源": "/饼干", "queryKey" :{},"chunks":["cookie"]},"urlOriginal":"/ session/391db430-154a-11e6-8a0a-ef59204729f5/cookie"}}屏幕截图:可通过屏幕获得
为了工作,我需要的是将webdriver更改为Firefox
这是一个已知的PhantomJS问题吗?
我正在尝试将Cookie添加到浏览器,但是出现以下错误:
消息:无效的参数:无效的“到期”(会话信息:chrome = 75.0.3770.90)
此代码显示了我如何加载和添加cookie。
for cookie in pickle.load(open(r'{0}\{1}_cookie.pkl'.format(settings.COOKIES_PATH, self.tv_username), 'rb')):
self.browser.add_cookie(cookie)
Run Code Online (Sandbox Code Playgroud)
Cookie的值:
{'__utmc': '226258911', '_sp_id.cf1a': '0b243b32-8dee-46d9-a243-bb4d2bfcb805.1560942815.1.1560942821.1560942815.5941cbc0-0500-4a17-8f6c-4ee3f133f67c', 'km_vs': '1', '__utmt': '1', '__utma': '226258911.510671571.1560942814.1560942814.1560942814.1', 'km_ai': 'm6caeIAUtEqx%2BIWda%2F7klZER%2F1Y%3D', 'kvcd': '1560942821112', '__utmb': '226258911.2.10.1560942814', 'km_lv': '1560942821', '__utmz': '226258911.1560942814.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)', 'etg': 'undefined', '_sp_ses.cf1a':'*'}
Run Code Online (Sandbox Code Playgroud)
与旧版chrome搭配使用时效果很好。任何帮助,将不胜感激!
我的期望是在验证后会自动将某些东西添加到cookeies数组中,但事实并非如此。
driver = webdriver.Chrome(chromedriver)
whatsapp_url = "https://web.whatsapp.com"
driver.get(whatsapp_url)
print(driver.get_cookies())
time.sleep(30) # We are doing the manual QR code verification here
print(driver.get_cookies())
Run Code Online (Sandbox Code Playgroud)
driver.get_cookies() 前后也是空的
python selenium python-3.x selenium-chromedriver selenium-webdriver
由于似乎无法使用现有的 Chrome 窗口,因此如何在打开的窗口中使用用户的 Google 帐户(以及所有设置和密码)Selenium?Selenium似乎为自己打开了窗口,但没有谷歌帐户,这是我的程序的重要组成部分。
我的程序对时间非常敏感,因此需要自动登录其访问的网站,并且该程序将被多个用户使用。
selenium ×7
python ×6
cookies ×3
firefox ×1
java ×1
javascript ×1
phantomjs ×1
python-3.x ×1
web-scraping ×1
webdriver ×1