首页 > 解决方案 > 使用 Python 和 Selenium Chrome 驱动程序

问题描述

我希望对如何让 selenium 与 href 一起工作有一些澄清或建议,我尝试通过几乎所有可能的元素来选择它。

我的最终目标是遍历每个“案例编号”并单击它,完成后将每个案例添加到列表中,然后如果它不在列表中,请单击它直到完成。

<td class="x-grid3-col x-grid3-cell x-grid3-td-CASES_CASE_NUMBER " style="width:172px;" tabindex="0"><div class="x-grid3-cell-inner x-grid3-col-CASES_CASE_NUMBER" id="5005a00001rezYE_CASES_CASE_NUMBER"><a href="/5005a00001rezYE">0000000</a></div></td>

<div class="x-grid3-cell-inner x-grid3-col-CASES_CASE_NUMBER" id="5005a00001rezYE_CASES_CASE_NUMBER"><a href="/5005a00001rezYE">0000000</a></div>

<a href="/5005a00001rezYE">0000000</a>

clicky = driver.find_element_by_css_selector("//div[@id='5005a00001rezYE_CASES_CASE_NUMBER']").click()

我也尝试过使用这个元素(这会让我想要做的事情更容易)


<a href="/5005a00001uLh3i/e?retURL=%2F500%3Ffcf%3D00B0b000007JS3z%26rolodexIndex%3D-1%26page%3D1"><span>Edit</span></a>
<span>Edit</span>

clicky = driver.find_element_by_xpath("span[contains(text(),'Edit')]").click()
clicky = driver.find_element_by_css_selector("span[Edit]").click()

标签: python-3.xseleniumselenium-chromedriver

解决方案


我不确定这个定位器是否正确和独特,但你可以试试这个:

clicky = driver.find_element_by_xpath("//span[contains(text(),'Edit')]").click()

在访问此元素之前,您可能必须添加一些延迟/等待。
最简单的方法是添加延迟

time.sleep(5)
clicky = driver.find_element_by_xpath("//span[contains(text(),'Edit')]").click()

虽然推荐的方法是添加显式等待,如下所示:

WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//span[contains(text(),'Edit')]"))).click()

为此,您需要添加以下导入:

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

推荐阅读