Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何处理动态变化的ID';在XPath中是什么?_Python_Selenium_Selenium Webdriver - Fatal编程技术网

Python 如何处理动态变化的ID';在XPath中是什么?

Python 如何处理动态变化的ID';在XPath中是什么?,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,我正在尝试自动登录网站。 每次我搜索页面时,邮箱的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_e

我正在尝试自动登录网站。 每次我搜索页面时,邮箱的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")

当我再次刷新时,它不起作用。

要处理动态元素,请导入
WebDriverWait
元素可单击()
由于ID是动态的,所以使用
start-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")

注意:您需要以下导入来执行上述代码

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

要处理动态元素,请导入
WebDriverWait
元素可单击()
由于ID是动态的,所以使用
start-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")

注意:您需要以下导入来执行上述代码

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

你能试试这个吗?它会有用的

driver.findElement(By.Xpath("//*[contains(@id,'undefined-undefined-E-mail')]").sendKeys("aa@yyy.com");


你能试试这个吗?它会有用的

driver.findElement(By.Xpath("//*[contains(@id,'undefined-undefined-E-mail')]").sendKeys("aa@yyy.com");

您可以通过两种方式完成:

1/检查某个元素是否包含某些内容(如字符串的一部分,有人已经用不同的答案回答了该部分内容…)

2/我使用的->使用完整Xpath。以下是如何做到这一点:

  • 下载这个(或类似的)扩展

  • 转到网站并复制xpath。。。当您获得包含特定ID的xpath时(例如:
    /*[@ID=“5633040”]/div/input
    ,您只需在该ID上方创建一个静态xpath(这就是此扩展的好处)…
    /*[@ID=“app_content”]/div/div/form/div[1]/div/div
    如果你不能安装扩展,你只需要试着看看你输入的是否正确,它是否工作

    ~Hope it help:)

    您可以通过两种方式完成:

    1/检查某个元素是否包含某些内容(如字符串的一部分,有人已经用不同的答案回答了该部分内容…)

    2/我使用的->使用完整Xpath。以下是如何做到这一点:

    • 下载这个(或类似的)扩展

    • 转到网站并复制xpath。。。当您获得包含特定ID的xpath时(例如:
      /*[@ID=“5633040”]/div/input
      ,您只需在该ID上方创建一个静态xpath(这就是此扩展的好处)…
      /*[@ID=“app_content”]/div/div/form/div[1]/div/div
      如果你不能安装扩展,你只需要试着看看你输入的是否正确,它是否工作



      ~Hope it help:)

      通过实际使用xpath,而不是按id查找。提供示例html以获得答案。链接:chrome-extension://megbklhjamjbcafknkgmokldgolkdfig/views.html?view=onBoarding ->开始浏览->跳过演示文稿,然后你会发现邮箱XPath也在变化//*[@id=“undefined-E-mail-undefined-52987”]然后//*[@id=“undefined-E-mail-undefined-33458”]然后//*[@id=“undefined-E-mail-undefined-64853”]……该视图看起来像一个弹出窗口。你能做
      驱动程序吗?切换到().alert()
      ,然后尝试输入电子邮件。通过实际使用xpath,而不是按id查找。请提供示例html以获取答案。链接:chrome-extension://megbklhjamjbcafknkgmokldgolkdfig/views.html?view=onBoarding ->开始浏览->跳过演示文稿,然后你会发现邮箱XPath也在变化//*[@id=“undefined-E-mail-undefined-52987”]然后//*[@id=“undefined-E-mail-undefined-33458”]然后//*[@id=“undefined-E-mail-undefined-64853”]……该视图看起来像一个弹出窗口。你能做些什么吗?
      driver.切换到().alert()
      ,然后试着输入电子邮件。我刚试过,但还是没有。“WebDriverWait(driver,20)”20代表什么?在抛出任何异常之前,它将等待20秒。您可以共享您的url吗?下面是错误:WebDriverWait(driver,20)。直到(EC.element to_可点击((By.XPATH,//input[以(@id,'undefined-E-mail-undefined-'))开始)。发送密钥(“X@gmail.com)文件“C:\Users\Salma\PycharmProjects\test\venv\lib\site packages\selenium\webdriver\support\wait.py”,第80行,直到引发超时异常(消息、屏幕、堆栈跟踪)selenium.common.exceptions.TimeoutException:Message:在这种情况下,请检查是否有iframe?或者与我共享您的url?很抱歉,我无法下载任何扩展。我正在使用公司笔记本电脑。我刚刚尝试过,但仍然没有。WebDriverWait(driver,20)是什么意思“20代表?在抛出任何异常之前,它将等待20秒。您可以共享您的url吗?以下是错误:WebDriverWait(driver,20)。直到(EC.element_to_be_clickable((By.XPATH,“//input[以(@id,'undefined-E-mail-undefined-'))开始)。发送密钥(”X@gmail.com)文件“C:\Users\Salma\PycharmProjects\test\venv\lib\site packages\selenium\webdriver\support\wait.py”,第80行,直到引发超时异常(消息、屏幕、堆栈跟踪)selenium.common.exceptions.TimeoutException:Message:在这种情况下,请检查是否有iframe?或者与我共享您的url?很抱歉,我无法下载任何扩展。我正在公司笔记本电脑上工作。错误:driver。通过xpath(“包含(@id,'undefined-E-mail-undefined')]”查找元素。发送密钥(“aa@yyy.com“)文件”C:/Users/Hamza/PycharmProjects/test/Chromedone.py”,第32行,在驱动程序中。通过xpath(“/*[contains(@id,'undefined-E-mail-undefined')”)查找元素。发送密钥(“aa@yyy.com)文件“C:\Users\Hamza\PycharmProjects\test\venv\lib\site packages\selenium\webdriver\remote\webdriver.py”,第394行,按xpath返回self.find\u元素(by=by.XPATH,value=XPATH)文件“C:\Users\Hamza\PycharmProjects\test\venv\lib\site packages\selenium\webdriver\remote\webdriver.py”,第978行,在find_元素'value':value})['value']文件“C:\Users\Hamza\PycharmProjects\test\venv\lib\site packages\selenium\webdriver\remote\webdriver.py”,第321行,在执行self.error\u handler.check\u响应(响应)文件“C:\Users\Hamza\PycharmProjects\test\venv\lib\site packages\selenium\webdriver\remote\errorhandler.py”,第242行,在check\u响应引发异常类(消息、屏幕、stac