如何将Python的Selenium WebDriver中的所有cookie保存到txt文件中,然后再加载它们?该文档没有说明getCookies函数的任何内容.
有人知道Selenium(最好是WebDriver)是否能够在启动Selenium客户端之前与已经运行的浏览器进行通信并采取行动?
我的意思是,如果Selenium能够在不使用Selenium Server的情况下与浏览器通信(例如可以手动启动Internet Explorer).
我知道这有点违背无头自动化的目的,但是......
我已经在无头模式下使用 Selenium 和 Chromedriver 运行自动化测试。我更愿意让它保持无头运行,但偶尔,它会遇到一个确实需要查看和交互的错误。是否可以渲染无头会话并与之交互?也许通过在非无头浏览器中复制无头浏览器?我可以通过远程调试进行连接,但开发工具似乎不允许我查看渲染的页面或与任何内容交互。
我可以截取屏幕截图,这很有帮助。但我确实在寻找交互的能力——有一些拖放元素不能很好地与 Selenium 配合使用,偶尔会导致问题。
对于使用硒的python程序的不同运行,是否有办法让我使用自己的凭据保留已打开并登录的浏览器,并在以后的运行中打开并使用?
我正在调试代码。每次需要在浏览器上使用我的凭据登录时。当前,每次我停止代码时,网络浏览器都会关闭。有没有办法保持我已经打开并已登录的浏览器的副本,并在以后的调试中使用它,以便每次无需再次输入登录凭据?
我打开浏览器的代码如下:
driver = webdriver.Chrome(executable_path="/the_path/chromedriver", chrome_options=chrome_options)
driver.get(url)
Run Code Online (Sandbox Code Playgroud)
编辑:
实际上,该网站要求进行身份验证的方式如下:首先,它要求输入用户名,然后我需要按继续按钮,然后要求输入密码,输入密码后,它将SMS发送到我的手机,在进入预期页面之前,我需要输入它。
尽管我意识到这不是“好的”做法-我有一个用例,需要将Selenium驱动程序指向(连接)我的默认Chrome会话/配置文件。
我的默认个人资料在这里:
~/Library/Caches/Google/Chrome/Default
这是我当前的设置方式:(不起作用)
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("--user-data-dir=~/Library/Caches/Google/Chrome")
options.add_argument("--profile-directory=Default")
browser = webdriver.Chrome(options=options, executable_path=r"./chromedriver")
browser.get("http://google.com")
Run Code Online (Sandbox Code Playgroud)
我正在使用Chrome版本74.0.3729.169和chromedriver版本ChromeDriver 74.0.3729.6(这是兼容版本)。
Chrome打开后,我在Chrome的设置中看不到任何Cookie,因此很明显它没有指向我的默认会话。另外,我看到Selenium已经创建了一个目录(这似乎表示该目录无法连接到的会话)~/Library/Caches/Google/Chrome/Default。
如何将硒连接到默认的Chrome会话?这与正常打开Chrome浏览器时看到的会话相同。
我已经看过另一个问题,但是那里的答案无法解决如何将Selenium指向默认会话。另外-这是一个过时的问题-从那时起,Chrome和Chromedriver取得了很大进步。另外,这里的问题假定发布者能够连接到默认会话-我无法执行此操作,这表明此后Chromedriver / Chrome已经更改。这个问题也是针对Windows的-我在Mac上工作方式有所不同。
cookies selenium google-chrome session-cookies selenium-webdriver
我一直在使用 Selenium Python 库测试各种自动化任务。在这个过程中我遇到了一个非常严重的问题。这是由于网络连接不良造成的延迟。所有任务的起始步骤都是相同的,即 - 打开浏览器 - 转到网站 - 登录 - 登录后打开特定链接
这些任务需要很长时间,因此我希望找到一种方法,可以重用已经打开的会话并继续在该窗口上进行测试,而不是每次运行脚本时打开新的浏览器窗口。
这是我迄今为止测试过的:
原始文件示例:
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
prefs = {"profile.default_content_setting_values.notifications" : 2}
chrome_options.add_experimental_option("prefs",prefs)
driver = webdriver.Chrome(r'C:\testDir\chromedriver_win32\chromedriver.exe', chrome_options=chrome_options)
url = driver.command_executor._url
session_id = driver.session_id
print("URL:",url,"SESSION ID:",session_id)
driver.get('http://www.facebook.com')
username = "---"
password = "---"
driver.find_element_by_name('email').send_keys(username)
driver.find_element_by_name('pass').send_keys(password)
driver.find_element_by_name('login').click()
# time.sleep(2)
driver.maximize_window()
time.sleep(2)
driver.find_elements_by_name('q').send_keys('Ayush Mandowara')
# element = wait.until(EC.presence_of_element_located((By.xpath, '//input[@placeholder="Search"]'))
driver.find_element_by_xpath('//input[@placeholder="Search"]').send_keys('Ayush Mandowara' + Keys.RETURN)
time.sleep(4)
driver.find_element_by_xpath('//div[contains(text(), "Ayush Mandowara")]').click()
time.sleep(3)
driver.find_element_by_class_name('coverBorder').click()
time.sleep(2)
Run Code Online (Sandbox Code Playgroud)
连接文件:
from connectingToPrev import url, session_id
driver = …Run Code Online (Sandbox Code Playgroud) selenium browser-automation python-3.x selenium-chromedriver selenium-webdriver
场景:需要将文件从 Web 层次结构下载到同一层次结构下的本地驱动器。
示例 Web 层次结构:
Parent 1:
Child 1:
*File 1
Child 2:
*File 2
Run Code Online (Sandbox Code Playgroud)
下载文件 1 时,它应该存储在路径 1 - "C:\....\Downloads\Parent 1\Child 1\"
下载文件 2 时,它应该存储在路径 2 - "C:\....\Downloads\Parent 1\Child 2\"
问题:
当我在 chrome webdriver 中保留“C:....\Downloads\Parent 1\Child 1\”下载路径,同时在 setUp() 中第一次初始化 webdriver 并下载“File 1”时,它会下载到预期的文件夹中。但是,当我在 chrome webdriver 中设置下一个“C:....\Downloads\Parent 1\Child 2\”下载路径以在其中下载文件 2 时,它会打开另一个 chrome 浏览器,因为我正在使用另一个 webdriver 来设置路径 2。
所需的解决方案:
我想使用现有的 webdriver 来设置不同的 chrome 下载路径或您能想到的任何其他解决方法。
当前代码:
def setUp(self):
browser = webdriver.Chrome(chromedriver_path, option_with_path_1_set)
def test_downloadFiles(self):
\*code to download first file\* …Run Code Online (Sandbox Code Playgroud) python selenium google-chrome selenium-chromedriver chrome-options
将 selenium webdriver 设置为无头模式后是否可以将其设置回正常模式?
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
options = Options()
options.headless = True
driver = webdriver.Firefox(options=options)
driver.get(http://stackoverflow.com)
# set driver back to normal mode
Run Code Online (Sandbox Code Playgroud) python selenium-chromedriver selenium-firefoxdriver google-chrome-headless firefox-headless
我想向https://www.google.com/发出 10 个请求,但使用 selenium 和 python 的随机用户代理。我有一个循环,在该循环内我使用随机用户代理(使用假用户代理)发出 10 个请求。主要问题是,对于每个请求,网络驱动程序都会打开一个新的谷歌浏览器实例,我想在一个实例中执行此操作,但使用不同的用户代理。我怎样才能使这成为可能?1 个 google chrome 实例和 10 个带有 10 个随机用户代理的请求。这是我的代码:
chrome_options = Options()
chrome_options.add_argument('no-sandbox')
chrome_options.add_argument("--start-maximized")
ua = UserAgent()
for i in range(0, 10):
userAgent = ua.random
chrome_options.add_argument('--user-agent="' + str(userAgent) + '"')
driver1 = webdriver.Chrome(chrome_options=chrome_options,
executable_path="C:/Python34/chromedriver")
driver1.get('https://www.google.com/')
time.sleep(5)
Run Code Online (Sandbox Code Playgroud) python selenium webdriver selenium-chromedriver selenium-webdriver
我试图在 selenium 完成执行我的测试脚本后保持 chrome 浏览器打开。我想重新使用同一个窗口来运行第二个脚本。
python selenium webdriver ui-automation selenium-chromedriver
操作系统:窗口 10
浏览器:Chrome webDriver
浏览器版本:Chrome 63.0.3239.10(64bit)
- 硒版本 2.44
添加以下依赖项:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.44.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
预期行为 -
我想检查驱动程序是否被用户直接关闭,如果没有浏览器,则重新启动webdriver。
在Driver webdriver = new ChromeDriver()代码之前,webdriver 为空状态,
但是Driver webdriver = new ChromeDriver()代码完成后,即使用户关闭浏览器,webdriver 也不会被破坏。
因此,在用户关闭浏览器后,所有与 webdriver 相关的代码都会出现错误:“无法访问的异常”。
如果浏览器被用户关闭,我想重新启动 webdriver,但我无法检测到这种情况。
driver!=null 代码不起作用,因为用户关闭浏览器后驱动程序仍然存在 if((driver.getWindowHandle().equals("")) 无法正常工作,因为 Chrome 无法访问异常,因为浏览器已被用户关闭我想要做的是检查浏览器是否因为用户而消失了?
如果我们创建:
ChromeDriver driver=new ChromeDriver();
Run Code Online (Sandbox Code Playgroud)
chrome 驱动程序方法将被执行。
如果我们创建:
WebDriver driver=new ChromeDriver();
Run Code Online (Sandbox Code Playgroud)
再次ChromeDriver执行方法[根据方法覆盖]。
那为什么我们只在执行时写后一个呢?
java selenium webdriver selenium-webdriver webdriver-w3c-spec