【问题标题】:Selenium ChromeDriver Not Locating HTML ElementsSelenium ChromeDriver 未定位 HTML 元素
【发布时间】:2021-03-09 03:06:06
【问题描述】:

我的 python 脚本在 Debian 谷歌云服务器上运行。我正在尝试从 Forexfactory.com/news。我在我的 macOS 上测试了我的代码,它运行良好。上传到服务器后,我必须将 chrome 选项参数添加到我的代码中,以帮助在 VM 中找到 chromedriver。正是在调试这个之后,selenium 无法找到所需的元素。

这是python代码:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import os

opt = Options()
opt.add_argument("--no-sandbox")
opt.add_argument("--disable-dev-shm-usage")
opt.add_argument("--headless")

driver = webdriver.Chrome(chrome_options=opt, executable_path=r'/home/rehanmahmood38/chromedriver')
URL = 'https://www.forexfactory.com/news'
driver.get(URL)

driver.implicitly_wait(5) # wait for seconds
uiOuter = driver.find_element_by_id('ui-outer')
aHref = driver.find_elements_by_css_selector('div.flexposts__story-title a')
span = driver.find_elements_by_css_selector('div.flexposts__storydisplay-info')

这是错误信息

Traceback (most recent call last):
  File "ffmain.py", line 16, in <module>
    uiOuter = driver.find_element_by_id('ui-outer')
  File "/usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py", line 360, in find_element_by_id
    return self.find_element(by=By.ID, value=id_)
  File "/usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py", line 978, in find_element
    'value': value})['value']
  File "/usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/lib/python3/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"id","selector":"ui-outer"}
  (Session info: headless chrome=83.0.4103.116)
  (Driver info: chromedriver=2.40.565383 (76257d1ab79276b2d53ee976b2c3e3b9f335cde7),platform=Linux 4.19.0-12-cloud-amd64 x86_64)

知道为什么 selenium 无法找到元素

【问题讨论】:

    标签: python selenium ubuntu selenium-webdriver selenium-chromedriver


    【解决方案1】:

    将此用于您的自定义窗口大小。可能在 MacOS 和 VM 上有所不同。

    driver.manage().window().setSize(new Dimension(1024,768));
    

    【讨论】:

    • 您好,这将返回指向“维度”关键字的无效语法错误。有什么想法吗?
    【解决方案2】:

    使用 selenium 的显式等待,而不是隐式等待。 似乎该元素可能未正确加载-因此未找到。 试试这个。

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    uiOuter = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "ui-outer"))
    

    如果您想进一步研究,关于等待的文档会很有帮助。

    https://selenium-python.readthedocs.io/waits.html

    【讨论】:

    • 嘿,我返回错误 NameError: name 'EC' is not defined,我错过了定义还是导入?
    • 您好@RehanMahmood,是的,您还需要专门导入它。我已经编辑了答案以包含它。它现在应该可以工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    相关资源
    最近更新 更多