使用python硒识别具有给定文本的元素

时间:2018-07-03 08:17:59

标签: python-3.x selenium-webdriver

我要抓取的网页上包含以下元素。

<a href="http://www.mylink/?p=20391">Sup Bonds Result June 26, 2018</a>

下面是我尝试使用的代码,尽管值存在,但似乎无法正常工作。它最初仅在少数情况下有效,但随后未提供任何结果。

try:
    element=driver.find_element_by_partial_text('Sup Bonds Result June 26, 2018')

except NoSuchElementException:
    driver.quit()

以下是我收到的错误,我已经用过time.sleep o允许脚本有一段时间来定位元素。

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"link text","selector":"Sup Bonds Result June 26, 2018"}

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

尝试如下申请ExplicitWait

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

try: 
    wait(driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, "Sup Bonds Result June 26, 2018")))
except TimeoutException:
    driver.quit()

还请注意,如果要使用按链接文本(部分链接文本)进行搜索,则需要传递与在浏览器页面上显示的文本完全相同的文本,而不是像在页面源中显示的那样传递文本。因此,如果它在"SUP BONDS..."页面上显示,则需要在代码中使用相同的页面

答案 1 :(得分:1)

您似乎很接近。当您只是尝试定位不单击)该元素时,您需要为该元素的可见性引入 WebDriverWait 。 / em>如下:

try:
    element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.PARTIAL_LINK_TEXT, "Sup Bonds Result June 26, 2018"))).click()
except TimeoutException:
    driver.quit()

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

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