我正在尝试自动登录网站。 每次我搜索页面时,邮箱ID都会更改
例如:
//*[@id="undefined-undefined-E-mail-53172"]
当我刷新页面时:
//*[@id="undefined-undefined-E-mail-33458"]
所以我每次都必须更改代码,例如:
driver.find_element_by_id("undefined-undefined-E-mail-53172").send_keys("X@gmail.com")
driver.find_element_by_id("undefined-undefined-E-mail-33458").send_keys("X@gmail.com")
当我再次刷新时,它不起作用。
答案 0 :(得分:1)
要处理动态元素,请诱导WebDriverWait
和element_to_be_clickable()
由于ID是动态的,因此请使用starts-with()
xpath表达式。
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//input[starts-with(@id,'undefined-undefined-E-mail-')]"))).send_keys("X@gmail.com")
或
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//*[starts-with(@id,'undefined-undefined-E-mail-')]"))).send_keys("X@gmail.com")
注意:您需要进行以下导入才能执行上述代码。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
答案 1 :(得分:1)
您可以尝试一下吗
driver.findElement(By.Xpath("//*[contains(@id,'undefined-undefined-E-mail')]").sendKeys("aa@yyy.com");
或
driver.findElement(By.Xpath("//*[starts-with(@id,'undefined-undefined-E-mail')]").sendKeys("aa@yyy.com");
答案 2 :(得分:0)
您可以通过2种方式做到这一点:
1 /检查somekinda元素是否包含某些内容(例如字符串的一部分,有人已经用其他答案回答了……)
2 /我使用的那个->使用完整的Xpath。这是您的操作方式:
下载此扩展程序https://chrome.google.com/webstore/detail/xpath-helper/hgimnogjllphhhkhlmebbmlgjoejdpjl
转到网站并复制xpath ...当您获得包含特定ID的xpath时(例如://*[@id="5633040"]/div/input
,您将超过该ID并尝试创建静态XPath (这是此扩展的优点).. //*[@id="app_content"]/div/div/form/div[1]/div/div
<-可以说这超出了//*[@id="5633040"]
//*[@id="app_content"]/div/div/form/div[1]/div/div/div/div/input
相同的结果;如果有更多div //*[@id="app_content"]/div/div/form/div[1]/div/div/div[number]/div/input
,则获得相同的结果P.S->如果您无法安装扩展程序,则只需要尝试看看是否正确输入即可并且有效
〜希望对您有所帮助:)