gpt4 book ai didi

python - 为什么每次在 Selenium Webdriver 中,任何 Web 元素的 “ID” 都会发生变化?

转载 作者:太空宇宙 更新时间:2023-11-04 09:58:12 25 4
gpt4 key购买 nike

我编写了一个脚本,它使用Selenium Webdriver(Python 绑定(bind))发送电子邮件。但有时,当我运行该脚本时,元素的 ID 会发生变化

错误回溯:

self.error_handler.check_response(response)
File "/usr/local/lib/python2.7/dist-packages/selenium-3.4.3-
py2.7.egg/selenium/webdriver/remote/errorhandler.py", line 194, in
check_response
raise exception_class(message, screen, stacktrace)
elenium.common.exceptions.NoSuchElementException: Message: no such
element: Unable to locate element: {"method":"id","selector":":pm"}

有时,如果我使用有效的 XPathCSS Selector,则会显示相同的错误。

任何人都可以建议使脚本工作的最佳方法吗?另外,为什么每次元素的 Id 都会更改?

我的代码:

from selenium import webdriver
import time
from time import sleep

driver = webdriver.Chrome()
driver.get("https://accounts.google.com")
driver.implicitly_wait(30)
usr = driver.find_element_by_id("identifierId").clear()
usr.send_keys("id@anymail.com")

nextb = driver.find_element_by_id("identifierNext")
nextb.click()

pwd = driver.find_element_by_xpath('//*[@id="password"]/div[1]/div/div[1]/input')
pwd.send_keys("**Enter your password**")

nextpwd = driver.find_element_by_xpath('//*[@id="passwordNext"]/content/span')
nextpwd.click()

driver.implicitly_wait(30)
driver.find_element_by_xpath("//*[@id=':hs']/div/div").click()

time.sleep(3)
to = driver.find_element_by_id(":nf")
to.send_keys("XYZ@gmail.com")

sub = driver.find_element_by_id(":my")
sub.send_keys("with attachment")

descp = driver.find_element_by_id(":nx")
descp.send_keys(" Hi! this second one.")

driver.find_element_by_id(":om").click() #attachmment
driver.find_element_by_css_selector("input[type=\"file\"]").send_keys("/home/example.png")
#sead the mail
driver.find_element_by_id(":mo").click()

最佳答案

你的意思是Id是动态的?这意味着在每个页面加载元素的 id 完全或部分改变。

如果没有静态部分(每次 id 都是 100% 随机的)——您将无法将其用作定位器,应该使用其他属性/元素来查找所需的属性/元素。像 //someParentElement/div[@class='someClass'] - 意味着你可以找到元素的父元素,或者使用额外的属性,比如 class/value/等等。

如果每次加载时都有静态 part - 您可以使用 css 或 xPath 定位器搜索包含/以静态 part 开头的元素。

搜索 id 包含某些部分的元素:

//*[contains(@id,'part')] - id contains part xpath locator

[id*=part] - id contains part css locator

搜索 id 以某个 part 开头的元素:

//*[starts-with(@id,'part')] - id starts with part xpath locator

[id^=part] - id starts with part css locator

关于python - 为什么每次在 Selenium Webdriver 中,任何 Web 元素的 “ID” 都会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44967183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com