【发布时间】:2021-04-14 18:58:45
【问题描述】:
如果这是一个糟糕的解释,我深表歉意,但我不知道如何更好地表达它。
从图片中您可以看到有一个名为 UPC 的文本,在它的正下方有一个数字。我想得到 UPC 正下方的号码。我想通过在网站上搜索文本“UPC”并在可能的情况下直接在其下方获取数字来找到它。
【问题讨论】:
标签: python selenium selenium-webdriver web-scraping xpath
如果这是一个糟糕的解释,我深表歉意,但我不知道如何更好地表达它。
从图片中您可以看到有一个名为 UPC 的文本,在它的正下方有一个数字。我想得到 UPC 正下方的号码。我想通过在网站上搜索文本“UPC”并在可能的情况下直接在其下方获取数字来找到它。
【问题讨论】:
标签: python selenium selenium-webdriver web-scraping xpath
如果您是此页面的所有者,最好使用唯一元素 id 来定位它们。无论如何,还有另一种解决方案。 正如selenium documentation 中所写,您可以使用css 选择器并仅使用“下一个元素”css-selector“~”。它可以是这样的:
content = driver.find_element_by_css_selector('div:contains("UPC") ~ div')
您可以阅读有关 CSS 选择器的更多信息here
祝你好运!
更新:正确答案是:
driver.find_element(By.XPATH, '//div[text()="UPC"]/following-sibling::div')
【讨论】:
注意:
find_element_by_*命令已弃用。请改用 find_element()
要打印号码840....,您可以使用以下任一Locator Strategies:
使用selenium3 方法和xpath:
print(driver.find_element_by_xpath("//div[contains(., 'UPC')]//following-sibling::div[1]").text)
使用selenium4 方法和xpath:
print(driver.find_element(By.XPATH, "//div[contains(., 'UPC')]//following-sibling::div[1]").text)
理想情况下,您需要为visibility_of_element_located() 诱导WebDriverWait,您可以使用以下任一Locator Strategies:
使用selenium3 方法和xpath:
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[contains(., 'UPC')]//following-sibling::div[1]"))).text)
使用selenium4 方法和xpath:
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[contains(., 'UPC')]//following-sibling::div[1]"))).text)
您可以在How to retrieve the text of a WebElement using Selenium - Python找到相关讨论
【讨论】: