Python-SeleniumWebDriver查找所有div节点具有相似名称的元素

Python-SeleniumWebDriver查找所有div节点具有相似名称的元素,python,selenium,selenium-webdriver,xpath,webdriverwait,Python,Selenium,Selenium Webdriver,Xpath,Webdriverwait,我正在尝试访问所有div都具有相同名称的div。让我解释一下。我刚开始学习selenium和python,我正在尝试创建一个网页来学习。我遇到了以下问题。我制作了示例html来显示网页的组成。所有的演员都有完全相同的级别和头衔。然后是项目的h1标签和颜色的p标签(这是一个可点击的链接)。当你给我一个特定的指示时,我正在尝试搜索一个页面。我在找一辆白色的赛车。我能够找到第一行代码的自行车,但如何在“赛车”部分找到正确的颜色?如果我运行下面提到的Python,我会收到一条错误消息。提前谢谢 赛车

我正在尝试访问所有div都具有相同名称的div。让我解释一下。我刚开始学习selenium和python,我正在尝试创建一个网页来学习。我遇到了以下问题。我制作了示例html来显示网页的组成。所有的演员都有完全相同的级别和头衔。然后是项目的h1标签和颜色的p标签(这是一个可点击的链接)。当你给我一个特定的指示时,我正在尝试搜索一个页面。我在找一辆白色的赛车。我能够找到第一行代码的自行车,但如何在“赛车”部分找到正确的颜色?如果我运行下面提到的Python,我会收到一条错误消息。提前谢谢


赛车

黑色

赛车

白色

赛车

黄色

城市的

黄色

城市的

绿色

要在白色赛车元素上定位/
单击()
,您需要引导WebDriverWait使
元素成为可单击的()
,并且您可以基于以下任一项使用:

  • 使用
    XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//h1[text()='racebike']//following-sibling::p[@class='test' and text()='white']"))).click()
    
  • 考虑到父级
    ,使用XPATH:

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

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
要在白色赛车元素上定位/
单击()
,您需要引导WebDriverWait使
元素成为可单击的()
,并且您可以基于以下任一项使用:

  • 使用
    XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//h1[text()='racebike']//following-sibling::p[@class='test' and text()='white']"))).click()
    
  • 考虑到父级
    ,使用XPATH:

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

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

您可以使用在解决方案中尝试的相同xpath。服务器可能需要太长时间才能重新发送

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

element = WebDriverWait(page, 10).until(EC.presence_of_element_located((By.XPATH, "//p[contains(@class, 'white')]")))
element.click()
适用于多种颜色的自行车

elements= WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located((By.XPATH, "//p[contains(@class, 'white')]")))
for element in elements:
    element.click()

您可以使用在解决方案中尝试过的相同xpath。服务器可能需要太长时间才能重新发送

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

element = WebDriverWait(page, 10).until(EC.presence_of_element_located((By.XPATH, "//p[contains(@class, 'white')]")))
element.click()
适用于多种颜色的自行车

elements= WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located((By.XPATH, "//p[contains(@class, 'white')]")))
for element in elements:
    element.click()

谢谢你的回复!我使用了代码,但出现了以下错误:
code
Traceback(最近一次调用最后一次):文件“脚本的位置”,第23行,在PythonProj(类别、项目、颜色、大小)文件“脚本的位置”,第16行,在init wait=WebDriverWait(self.driver,20)中。直到(EC.element_to_可点击((By.XPATH),//h1[text()='Race Bike']//following sibling::p[text()='Red']>),单击()文件“selenium wait.py的位置”,第80行,在until raise TimeoutException(消息、屏幕、堆栈跟踪)selenium.common.exceptions.TimeoutException:message:
code
对不起,我的上一条评论有问题,希望这一条更清晰易读<代码>回溯(最近一次调用last):文件“脚本位置”,第23行,PythonProj(类别、项目、颜色、大小)文件“脚本位置”,第16行,在uuu init_uuuuuuuuuuuuwait=WebDriverWait(self.driver,20)中。直到(EC.element_u可点击((By.XPATH,//h1[text()='Race Bike']//following兄弟姐妹::p[text()='Red']))为止。点击()文件“selenium wait.py的位置”,第80行,在until raise TimeoutException(message,screen,stacktrace)selenium.common.exceptions.TimeoutException:message:我做错了什么?谢谢你的回答!我使用了代码,但得到了这个错误:
代码
回溯(最近一次调用):File“脚本的位置”,第23行,在PythonProj(category,item,color,size)文件“脚本位置”的第16行,在init wait=WebDriverWait(self.driver,20)中。直到(EC.element可点击((By.XPATH,//h1[text()='Race Bike']//following sibling::p[text()='Red'])。单击()文件“selenium wait.py的位置”,第80行,直到引发TimeoutException(message,screen,stacktrace)selenium.common.exceptions.TimeoutException:message:
code
抱歉,我的上一条评论有问题,希望这一条更清晰易读。
Traceback(最近一次调用):PythonProj(类别、项目、颜色、大小)文件“脚本位置”第23行的文件“脚本位置”,第16行,在uuu init_uuuuuuuuuuwait=WebDriverWait(self.driver,20)。直到(EC.element_uto_u可点击((By.XPATH,//h1[text()='Race Bike']//following sibling::p[text()='Red'])。点击()文件“selenium wait.py的位置”,第80行,直到引发TimeoutException(消息、屏幕、堆栈跟踪)selenium.common.exceptions.TimeoutException:Message:
我做错了什么?感谢您的回复!我认为这在我在本页给出的示例中是可行的,但当有多辆白色自行车时,这将如何工作?如何找到正确颜色的正确自行车?请检查更新的解决方案以获得多辆使用它的自行车e color当我使用此代码时,我得到一个raise TimeoutException(消息、屏幕、堆栈跟踪)错误,出了什么问题?我增加了等待时间,现在请检查我修复了问题,非常感谢,代码以一种奇怪的方式构造,这就是为什么它不起作用。我最终使用父方法和子方法找到了正确的xpath。感谢您的回答!我想这在我在本页给出的示例中是可行的,但如何解决呢当有多辆白色自行车时,这项工作正常?如何找到正确颜色的正确自行车?检查多辆白色自行车的更新解决方案当我使用此代码时,我会收到一个raise TimeoutException(消息、屏幕、堆栈跟踪)错误,出了什么问题?我已经增加了等待时间,请现在检查我已经解决了问题,非常感谢,代码的结构很奇怪,所以它不起作用。我最终使用父方法和子方法找到了正确的xpath。