小编Deb*_*anB的帖子

Selenium WebDriverException:未知错误:调用sendkeys方法时调用函数结果缺少'value'

当试图在selenium webdriver中调用Sendkeys方法时,它显示如下错误:

Exception in thread "main" org.openqa.selenium.WebDriverException: unknown error: call function result missing 'value'  
 (Session info: chrome=65.0.3325.146)  
 (Driver info: chromedriver=2.27.440174 (e97a722caafc2d3a8b807ee115bfb307f7d2cfd9),platform=Windows NT 6.1.7600 x86_64) (WARNING: The server did not provide any stacktrace information)
Run Code Online (Sandbox Code Playgroud)

Selenium Jarversion:3.10.0

selenium google-chrome webdriver selenium-chromedriver selenium-webdriver

8
推荐指数
1
解决办法
2万
查看次数

WebDriverWait 未按预期工作

我正在使用硒来抓取一些数据。

我点击的页面上有一个按钮说“custom_cols”。此按钮为我打开一个窗口,我可以在其中选择我的列。

这个新窗口有时需要一些时间才能打开(大约 5 秒)。所以为了处理这个我用过

WebDriverWait 
Run Code Online (Sandbox Code Playgroud)

延迟为 20 秒。但有时它无法在新窗口中选择查找元素,即使该元素可见。这种情况只有十次发生一次,其余时间它都可以正常工作。

我也在其他地方使用了相同的功能(WebDriverWait),它按预期工作。我的意思是它会等到元素可见,然后在找到它的那一刻点击它。

我的问题是为什么即使我正在等待元素可见,新窗口上的元素也不可见。要在这里添加,我试图增加延迟时间,但我仍然偶尔会遇到该错误。

我的代码在这里

def wait_for_elem_xpath(self, delay = None, xpath = ""):
    if delay is None:
        delay = self.delay

    try:
        myElem = WebDriverWait(self.browser, delay).until(EC.presence_of_element_located((By.XPATH , xpath)))
    except TimeoutException:
        print ("xpath: Loading took too much time!")
    return myElem
select_all_performance = '//*[@id="mks"]/body/div[7]/div[2]/div/div/div/div/div[2]/div/div[2]/div[2]/div/div[1]/div[1]/section/header/div'
self.wait_for_elem_xpath(xpath = select_all_performance).click()
Run Code Online (Sandbox Code Playgroud)

python selenium web-scraping webdriverwait expected-condition

8
推荐指数
1
解决办法
6874
查看次数

ConnectionResetError:[Errno 104] peer上的连接重置和heroku上的ERR_NAME_NOT_RESOLVED通过Selenium进行移动测试

我想用硒和铬测试多个移动用户代理.我正在使用python 3.6并部署到heroku.基于http://chromedriver.chromium.org/mobile-emulation.

您可以在以下位置下载用于Windows和heroku的项目:

https://github.com/kc1/mobiletest
Run Code Online (Sandbox Code Playgroud)

(请记住,如果部署到heroku,则必须将FLASK_CONFIG设置为生产.另请注意,项目中的代码与此问题略有不同,因为我过去一周一直在使用代码.)

我有:

def some_long_calculation():
    driver = create_chromedriver('kkk')
    # driver = create_chromedriver()

    driver.get("https://www.yahoo.com/")
    .....
Run Code Online (Sandbox Code Playgroud)

并且:

def create_chromedriver(ua=False):
    options = webdriver.ChromeOptions()
    CHROMEDRIVER_PATH = os.getenv('$HOME') or basedir+'/chromedriver.exe'
    FLASK_CONFIG = os.getenv('FLASK_CONFIG')

    if ua:

        mobile_emulation = {"deviceName": "Nexus 5"}
        options.add_experimental_option("mobileEmulation", mobile_emulation)


    if FLASK_CONFIG and FLASK_CONFIG == "production":
        CHROMEDRIVER_PATH = '/app/.chromedriver/bin/chromedriver'
        GOOGLE_CHROME_SHIM = os.getenv('$GOOGLE_CHROME_SHIM') or 'no path found'
        options.binary_location = '/app/.apt/usr/bin/google-chrome-stable'

        options.add_argument('--disable-gpu')
        options.add_argument('--no-sandbox')

    return webdriver.Chrome(executable_path=CHROMEDRIVER_PATH, options=options)  
Run Code Online (Sandbox Code Playgroud)

如果我在启用移动浏览器的情况下在本地运行它按预期工作:

在此输入图像描述

如果我在启用了移动浏览器的情况下在heroku上运行它:

在此输入图像描述

然后我在heroku上尝试了移动用户,我得到了:

在此输入图像描述

所以至少我知道设置工作就像chrome和chromedriver一样.

heroku日志:

2018-07-15T17:37:53.967643+00:00 app[web.1]:     driver = create_chromedriver('kkk')
2018-07-15T17:37:53.967637+00:00 app[web.1]:     png = …
Run Code Online (Sandbox Code Playgroud)

python selenium heroku selenium-chromedriver selenium-webdriver

8
推荐指数
1
解决办法
5404
查看次数

MaxRetryError: HTTPConnectionPool: Max retries exceeded (Caused by ProtocolError('Connection aborted.', error(111, 'Connection denied')))

我有一个问题:我想测试“选择”和“输入”。我可以像下面的代码那样写:原始代码:

 12 class Sinaselecttest(unittest.TestCase):
 13 
 14     def setUp(self):
 15         binary = FirefoxBinary('/usr/local/firefox/firefox')
 16         self.driver = webdriver.Firefox(firefox_binary=binary)
 17 
 18     def test_select_in_sina(self):
 19         driver = self.driver
 20         driver.get("https://www.sina.com.cn/")
 21         try:
 22             WebDriverWait(driver,30).until(
 23                 ec.visibility_of_element_located((By.XPATH,"/html/body/div[9]/div/div[1]/form/div[3]/input"))
 24             )
 25         finally:
 26             driver.quit()
 # #??select??
 27         select=Select(driver.find_element_by_xpath("//*[@id='slt_01']")).select_by_value("??")
 28         element=driver.find_element_by_xpath("/html/body/div[9]/div/div[1]/form/div[3]/input")
 29         element.send_keys("??")
 30         driver.find_element_by_xpath("/html/body/div[9]/div/div[1]/form/input").click()
 31         driver.implicitly_wait(5)

 32    def tearDown(self):
 33        self.driver.close()
Run Code Online (Sandbox Code Playgroud)

我想测试Selenium的“选择”功能。所以我选择sina网站选择一个选项并在textarea中输入文本。然后搜索它。但是当我运行这个测试时,它有错误:

 Traceback (most recent call last):
      File "test_sina_select.py", line 32, in tearDown
        self.driver.close()
      File "/usr/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 688, in close
        self.execute(Command.CLOSE)
      File "/usr/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 319, in …
Run Code Online (Sandbox Code Playgroud)

python selenium urllib3 python-requests selenium-webdriver

8
推荐指数
1
解决办法
3万
查看次数

iframe下#document的处理方式

对于我现在正在测试的门户,我遇到了无法创建任何 xpath 定位器的问题,一段时间后我发现这是因为“#document”,这会切断路径并制作简单的“复制 xpath” " 将路径指向一个完全不同的元素。

<iframe id="FRAMENAME" src="/webclient/workspace/launch-task/REMbl?ds=BP" width="100%" height="100%" frameborder="0" data-navitemname="navitemname" style="" xpath="1">
#document
    <html>
        CODE....
    </html>
Run Code Online (Sandbox Code Playgroud)

我找到了解决方案,只需添加一个像这样的 switchTo:

driver.switchTo().frame("FRAMENAME");
Run Code Online (Sandbox Code Playgroud)

这有效并使其余代码正常工作,但是需要一些额外的时间来处理此命令,直到代码移动到下一行。

所以我想问一下,有没有更好的解决方案?更智能/更快的东西?

我担心当我有很多脚本的时候,执行时间会太长。

例如,我不使用 id 定位器,因为它们都是动态的,因此有时需要 xpath。

谢谢!

javascript iframe selenium selenium-webdriver protractor

8
推荐指数
2
解决办法
8829
查看次数

使用 Selenium 时是否需要安装 Chrome 或仅安装 chromedriver?

我试图搜索,但还没有找到明确的答案。在没有实际安装 Chrome 浏览器的 Windows Server 2016 上。我下载了正确的“chromedriver.exe”并将其放在“D:\Apps\chromedriver.exe”中。我已将完整路径添加到我的环境 PATH 中,作为“D:\Apps\chromedriver.exe”。

当我尝试启动使用最新 Selenium 的 Windows 服务时,出现以下错误:

Exception occurred: Failed initializing web driver: Message: unknown error: cannot find Chrome binary
  (Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 10.0.14393 x86_64)
Run Code Online (Sandbox Code Playgroud)

问题:除了 chromedriver 之外,我是否还必须实际安装功能齐全的浏览器,还是只是在我的 Python 代码中找不到 chromedriver.exe(包含在下面以供全面披露):

def __init__(self, username, password, environment='cert'):
    self.username = username
    self.password = password
    self.environment = environment

    # Instantiate a chrome options object so you can set the size and headless preference
    self.chrome_options = Options()

    # Toggle Headless or not
    if HEADLESS_TOGGLE == …
Run Code Online (Sandbox Code Playgroud)

selenium google-chrome python-3.x selenium-chromedriver google-chrome-headless

8
推荐指数
2
解决办法
1万
查看次数

通过 Selenium Python 在普通/无头模式下使用 ChromeDriver/Chrome 访问 Cloudflare 网站有什么区别

我有一个问题 --headlessPython Selenium for Chrome 模式。

代码

 from selenium import webdriver
 from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

 CHROME_DRIVER_DIR = "selenium/chromedriver"

 chrome_options = webdriver.ChromeOptions()
 caps = DesiredCapabilities().CHROME
 chrome_options.add_argument("--disable-dev-shm-usage")
 chrome_options.add_argument("--remote-debugging-port=9222")
 chrome_options.add_argument("--headless")  # Runs Chrome in headless mode.
 chrome_options.add_argument('--no-sandbox')  # # Bypass OS security model
 chrome_options.add_argument("--disable-extensions")
 chrome_options.add_argument("--disable-gpu")

 browser = webdriver.Chrome(desired_capabilities=caps, executable_path=CHROME_DRIVER_DIR, options=chrome_options)

 browser.get("https://www.manta.com/c/mm2956g/mashuda-contractors")
 print(browser.page_source)
 browser.quit()
Run Code Online (Sandbox Code Playgroud)

当我删除chrome_options.add_argument("--headless")所有工作正常时,但是--headless*有了下一个问题

Please enable cookies.

Error 1020 Ray ID: 53fd62b4087d8116 • 2019-12-04 11:19:28 UTC

Access denied

What happened?
This website is using a security service to …
Run Code Online (Sandbox Code Playgroud)

python selenium cloudflare selenium-chromedriver google-chrome-headless

8
推荐指数
3
解决办法
1万
查看次数

如何旋转 Selenium 浏览器 IP 地址

我有一个每 30 秒访问一个网站的 Python 脚本,每次我都需要一个不同的 IP 地址。

最好/最省时的解决方案是什么?

  • 在线抓取免费代理?你知道一个从许多来源收集代理的 python 脚本吗?

  • 使用 Tor 浏览器每次都有不同的 IP(我在 aws ec2 实例上使用 selenium,你们知道如何在 Ubuntu 服务器上使用 Tor 浏览器的教程?)

  • 其他方法?

python proxy selenium webdriver selenium-webdriver

8
推荐指数
2
解决办法
2万
查看次数

InvalidArgumentException:消息:使用 GeckoDriver Firefox Selenium 和 Python 时,二进制文件不是 Firefox 可执行文件错误

我遇到了与 FireFox 二进制文件相关的硒错误。

我使用反斜杠将 C:/Users/Mack/AppData/Local/Programs/Python/ 添加到 PATH 并重新启动。我在这里下载了我认为正确的文件https://github.com/mozilla/geckodriver/releases 我将该文件放在连接到 PATH 的目录中。

为了解决这个问题:我尝试使用两个反斜杠

binary = FirefoxBinary("C:\\Users\Mack\AppData\Local\Programs\Python\Python38-32\geckodriver-v0.27.0-win64\geckodriver.exe")
Run Code Online (Sandbox Code Playgroud)

这会引发相同的错误

我尝试使用一个反斜杠

binary = FirefoxBinary("C:\Users\Mack\AppData\Local\Programs\Python\Python38-32\geckodriver-v0.27.0-win64\geckodriver.exe")
Run Code Online (Sandbox Code Playgroud)

这会抛出:

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
Traceback (most recent call last):
  File "C:\Users\Mack\Desktop\hacker-stories\Trends.py", line 32, in <module>
    browser = webdriver.Firefox(**firefox_binary=binary**)
  File "C:\Users\Mack\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 170, in __init__
    RemoteWebDriver.__init__(
  File "C:\Users\Mack\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "C:\Users\Mack\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "C:\Users\Mack\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, …
Run Code Online (Sandbox Code Playgroud)

python firefox selenium selenium-webdriver geckodriver

8
推荐指数
2
解决办法
3万
查看次数

如果chromedriver与chrome版本不兼容如何修复?

当我运行我的代码时出现以下错误:

selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 85
Run Code Online (Sandbox Code Playgroud)

我尝试下载较新版本的 chromdriver 但它仍然给我同样的错误。我尝试替换当前正在运行的 chromedriver 和我最近下载的 chromedriver,但它仍然给出相同的错误,所以我下载了 chromdriver 的兼容版本,然后我使用了这一行代码:

driver = webdriver.Chrome(executable_path='D:\talha\Documents\Projects For Portfolio\SmmoBot\chromedriver_win32\chromedriver.exe')
Run Code Online (Sandbox Code Playgroud)

但这会返回以下错误:

selenium.common.exceptions.WebDriverException: Message: 'chromedriver.exe' executable needs to be in PATH
Run Code Online (Sandbox Code Playgroud)

python selenium google-chrome selenium-chromedriver selenium-webdriver

8
推荐指数
1
解决办法
2万
查看次数