Python/Selenium 识别元素问题

Posted

技术标签:

【中文标题】Python/Selenium 识别元素问题【英文标题】:Python/Selenium Identifying an element issue 【发布时间】:2022-01-22 09:42:51 【问题描述】:

我正在尝试使用 python 登录网页,但由于某种原因,无论我尝试什么,我都无法获得正确的登录元素,因为我是菜鸟,这是我的第一次尝试。

这应该是网页中的元素:

<label class="">Username</label>
<input type="text" formcontrolname="username" class="form-control ng-pristine ng-invalid ng-touched xh-highlight">

我试过按标签搜索但没有成功:

username = browser.find_element_by_xpath("//label[contains(text(),'Username')]")

我试过按类别搜索:

username = browser.find_element_by_xpath('//input[@class="form-control ng-pristine ng-invalid ng-touched"]')

我尝试过使用 CssSelector 进行搜索:

username = browser.find_element_by_css_selector("input[formcontrolname='Username']")

我什至尝试过完整的道路:

username = browser.find_element_by_xpath("/html/body/app/div[@class='app-container']/ng-component/div[@class='container']/div[@class='row']/div[@class='col']/div[@class='card']/ng-component/div[@class='card-body']/form[@class='ng-pristine ng-invalid ng-touched']/div[@class='form-group'][1]/input[@class='form-control ng-pristine ng-invalid ng-touched']")

我不知道我做错了什么,请帮忙

【问题讨论】:

Link to image of the source code. 有几个可能的问题。你能分享一个指向那个页面的链接吗? @Prophet link 这个链接不够用。 1)那里可能有 iframe 2)也许你错过了等待等...... 【参考方案1】:

要定位 clickable 元素,您需要为element_to_be_clickable() 诱导WebDriverWait,您可以使用以下Locator Strategies 之一:

使用CSS_SELECTOR

username = WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[formcontrolname='username']"))).click()

使用XPATH

username = WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@formcontrolname='username']"))).click()

注意:您必须添加以下导入:

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

【讨论】:

【参考方案2】:

有几个可能的问题:

    在您尝试访问元素之前,您可能会错过等待/延迟来加载页面。 元素可能位于 iframe 内,因此您必须切换到该 iframe 才能访问其中的元素。 定位器可能不是唯一的。 为了给出更明确的答案,我们需要查看您正在使用的我们页面以及所有相关代码

【讨论】:

以上是关于Python/Selenium 识别元素问题的主要内容,如果未能解决你的问题,请参考以下文章

Python+Selenium元素定位不到的问题及解决办法

python selenium系列元素等待

python selenium webscraping“NoSuchElementException”无法识别

Python+Selenium 定位页面元素

python+selenium如何定位多层iframe中元素

python+selenium识别验证码并登录