Python Selenium:使用 webdriver 定位并单击 -> 工具提示可见,没有“id”或“name”

本杰明·迪洛伦佐

我的问题如下:我尝试使用 webdriver 使用 python 和 selenium 登录到 Wikifolio.com。登录工作到目前为止(对硒的实际作用非常基本的了解)。我还设法点击了将出现的免责声明按钮。

除了下面的“交易”按钮列表之外,每个按钮都连接到不同的资产。当我单击“交易”按钮上的“检查”时,我从站点获得以下 xpath:

//*[@id="root-wf-trading"]/div/div/table/tbody/tr[3]/td/table/tbody/tr[6]/td/div/a[1]

或完整的 xpath

/html/body/div[3]/main/div[3]/div[2]/div[1]/div/div/div[1]/div[2]/div/div/div[1]/div/div/table/tbody/tr[3]/td/table/tbody/tr[6]/td/div/a[1]

根据 html 是

<a href="#add_virtual_order" rel="US88554D2053" data-amount="999" data-issuer="1900" data-description="3 D SYS CORP.     DL-,001" data-security-type="620" class="add_virtual_order js-trade-button inline c-btn btn-trade-xsm u-mr-0 u-fs-s" data-main-editable="true" data-toggle="tooltip" data-placement="top" data-original-title="<div class='wikifolio-tooltip-text'>Neuen Trade platzieren</div>" aria-describedby="tooltip436117">Trade</a>

到目前为止我使用的python代码如下:

from selenium import webdriver

username = "*********"
password = "*********"

url = "https://www.wikifolio.com/dynamic/de/de/login/login?ReturnUrl=/de/de/home&_=1632037782306"


driver = webdriver.Chrome(executable_path=r'\Users\Benjamin\Downloads\chromedriver_win32\chromedriver.exe')

driver.get(url)
driver.find_element_by_name("Username").send_keys(username)
driver.find_element_by_name("Password").send_keys(password)

driver.find_element_by_css_selector("button").click()

driver.get("https://www.wikifolio.com/de/de/meine-wikifolios/trade/wf00wiking")


driver.find_element_by_css_selector(".c-disclaimer .js-disclaimer__abort, .c-disclaimer .js-disclaimer__change").click()





driver.find_element_by_xpath('/html/body/div[3]/main/div[3]/div[2]/div[1]/div/div/div[1]/div[2]/div/div/div[1]/div/div/table/tbody/tr[3]/td/table/tbody/tr[6]/td/div/a[1]').click()

当我尝试运行此代码时,会出现以下内容:

NoSuchElementException                    Traceback (most recent call last)
<ipython-input-47-2808785f4fd0> in <module>
     18 
     19 
---> 20 driver.find_element_by_css_selector(".c-disclaimer .js-disclaimer__abort, .c-disclaimer .js-disclaimer__change").click()
     21 
     22 

~\anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in find_element_by_css_selector(self, css_selector)
    596             element = driver.find_element_by_css_selector('#foo')
    597         """
--> 598         return self.find_element(by=By.CSS_SELECTOR, value=css_selector)
    599 
    600     def find_elements_by_css_selector(self, css_selector):

~\anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in find_element(self, by, value)
    976         return self.execute(Command.FIND_ELEMENT, {
    977             'using': by,
--> 978             'value': value})['value']
    979 
    980     def find_elements(self, by=By.ID, value=None):

~\anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params)
    319         response = self.command_executor.execute(driver_command, params)
    320         if response:
--> 321             self.error_handler.check_response(response)
    322             response['value'] = self._unwrap_value(
    323                 response.get('value', None))

~\anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py in check_response(self, response)
    240                 alert_text = value['alert'].get('text')
    241             raise exception_class(message, screen, stacktrace, alert_text)
--> 242         raise exception_class(message, screen, stacktrace)
    243 
    244     def _value_or_default(self, obj, key, default):

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".c-disclaimer .js-disclaimer__abort, .c-disclaimer .js-disclaimer__change"}
  (Session info: chrome=93.0.4577.82)

我能做什么?我怎样才能找到并打开“交易”按钮?

非常感谢和最良好的祝愿,本杰明

预言家

你的定位器肯定是坏的,这就是为什么你得到NoSuchElementException.
为了给你正确的定位器,我需要使用有效的凭据进入。
基于您提供的元素 HTML 而不是

driver.find_element_by_xpath('/html/body/div[3]/main/div[3]/div[2]/div[1]/div/div/div[1]/div[2]/div/div/div[1]/div/div/table/tbody/tr[3]/td/table/tbody/tr[6]/td/div/a[1]').click()

尝试这个:

driver.find_element_by_xpath("//a[@data-toggle='tooltip' and(contains(@href,'add_virtual_order')) and(contains(@class,'add_virtual_order'))]").click()

此外,您必须在访问元素之前添加等待/延迟,如下所示:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

username = "*********"
password = "*********"

url = "https://www.wikifolio.com/dynamic/de/de/login/login?ReturnUrl=/de/de/home&_=1632037782306"


driver = webdriver.Chrome(executable_path=r'\Users\Benjamin\Downloads\chromedriver_win32\chromedriver.exe')
wait = WebDriverWait(driver, 20)

driver.get(url)
driver.find_element_by_name("Username").send_keys(username)
driver.find_element_by_name("Password").send_keys(password)

driver.find_element_by_css_selector("button").click()

driver.get("https://www.wikifolio.com/de/de/meine-wikifolios/trade/wf00wiking")

wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".c-button--ghost"))).click()

wait.until(EC.visibility_of_element_located((By.XPATH, "//a[@data-toggle='tooltip' and(contains(@href,'add_virtual_order')) and(contains(@class,'add_virtual_order'))]"))).click()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Selenium Webdriver在Python中定位iframe

尝试在 python 中使用 webdriver selenium 单击搜索选项时出现“元素不可见异常”

无法在python中使用Selenium Webdriver定位元素

无法在 python 上使用 selenium webdriver 定位元素

PYTHON:xPath 不会定位和输入字段。使用 selenium、Webdriver 等

使用 python 使用 Selenium webdriver 单击悬停菜单上的项目

如何使用带有 Python 的 Selenium Webdriver 从没有属性的工具提示中获取文本?

无法在python中使用Selenium WebDriver单击链接

无法使用 Selenium WebDriver w Python 选择/单击按钮

无法在python中使用Selenium Webdriver单击单选按钮

如何使用Selenium Webdriver Python单击呼叫下拉列表?

如何使用python selenium webdriver单击框架中存在的按钮

如何使用Selenium Webdriver(Python)随机选择并单击元素?

单击带有Python和Selenium的Firefox Webdriver的下载链接

Python + Selenium WebDriver,单击提交按钮

无法单击此按钮Selenium Webdriver Python

无法单击或发送密钥,selenium webdriver python

使用Selenium和Python无法定位和单击元素

Selenium Webdriver wait预期条件失败:等待By.id定位的元素的可见性

如何强制Selenium WebDriver单击当前不可见的元素?

Selenium Webdriver问题,具有:预期条件失败:等待由(..)定位的元素的可见性

Selenium Webdriver-等待用户单击没有ID的按钮

使用Java与Python的Selenium Webdriver

无法使用Selenium WebDriver定位输入元素

无法使用 Selenium 定位 webdriver 元素 |

如何通过Python使用Selenium WebDriver在iframe中定位元素

如何使用Selenium Webdriver Python中跨度的定位器打印文本?

无法在python硒中使用Selenium Chrome WebDriver定位元素

使用python在Selenium中可见后单击按钮