使用 python/selenium 从元素 link 中提取部分文本
Extract partial text from element link with python/selenium
下面HTML,我的目标是return zzde7e35d-8d9d-4763-95d2-9198684abb12
<div class = container>
<a class="Blue-Button" data-type="patch" data-disable-with="Waiting" href="/market/opening/zzde7e35d-8d9d-4763-95d2-9198684abb12">Yes</a>
</div>
问题是,我什至无法在 div
中找到 URL
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
link = example.url
driver.get(link)
URL = driver.find_element_by_xpath('//a[contains(@href,"market")]')
print(URL)
打印上面的内容,我似乎得到了一堆与 HTML 完全无关的随机字符,更不用说有问题的 URL 了。
如果它简化了问题,returned 的字符数将始终是相同的长度,建立索引是否容易解决?
如果你想获得 href
你需要使用 get_attribute('href')
这会给你 /market/opening/zzde7e35d-8d9d-4763-95d2-9198684abb12
然后 split() 这个你会得到最后一个元素。
link = example.url
driver.get(link)
URL = driver.find_element_by_xpath('//a[contains(@href,"market")]')
print(URL.get_attribute('href').split("/")[-1])
输出:
zzde7e35d-8d9d-4763-95d2-9198684abb12
您可能错过了延迟。
而不是
URL = driver.find_element_by_xpath('//a[contains(@href,"market")]')
尝试使用
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
URL = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//a[contains(@href,"market")]'))).get_attribute("href")
print(URL)
您还必须从返回的 Web 元素对象中提取 href
属性值,如代码所示。
如果这仍然不起作用,请检查您尝试访问的元素是否在 iframe 等内部。或者定位器可能不是唯一的等。
要打印 href 属性的部分值,即 zzde7e35d-8d9d-4763-95d2-9198684abb12
,您需要引入 WebDriverWait for the and you can use either of the following :
使用LINK_TEXT:
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.LINK_TEXT, "Yes"))).get_attribute("href").split("/")[3])
使用CSS_SELECTOR:
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "a.Blue-Button[data-type='patch'][data-disable-with='Waiting'][href*='market']"))).get_attribute("href").split("/")[3])
使用 XPATH:
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//a[@class='Blue-Button' and @data-type='patch'][@data-disable-with='Waiting' and contains(@href, 'market')]"))).get_attribute("href").split("/")[-1])
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
You can find a relevant detailed discussion in
下面HTML,我的目标是return zzde7e35d-8d9d-4763-95d2-9198684abb12
<div class = container>
<a class="Blue-Button" data-type="patch" data-disable-with="Waiting" href="/market/opening/zzde7e35d-8d9d-4763-95d2-9198684abb12">Yes</a>
</div>
问题是,我什至无法在 div
中找到 URLfrom selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
link = example.url
driver.get(link)
URL = driver.find_element_by_xpath('//a[contains(@href,"market")]')
print(URL)
打印上面的内容,我似乎得到了一堆与 HTML 完全无关的随机字符,更不用说有问题的 URL 了。
如果它简化了问题,returned 的字符数将始终是相同的长度,建立索引是否容易解决?
如果你想获得 href
你需要使用 get_attribute('href')
这会给你 /market/opening/zzde7e35d-8d9d-4763-95d2-9198684abb12
然后 split() 这个你会得到最后一个元素。
link = example.url
driver.get(link)
URL = driver.find_element_by_xpath('//a[contains(@href,"market")]')
print(URL.get_attribute('href').split("/")[-1])
输出:
zzde7e35d-8d9d-4763-95d2-9198684abb12
您可能错过了延迟。
而不是
URL = driver.find_element_by_xpath('//a[contains(@href,"market")]')
尝试使用
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
URL = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//a[contains(@href,"market")]'))).get_attribute("href")
print(URL)
您还必须从返回的 Web 元素对象中提取 href
属性值,如代码所示。
如果这仍然不起作用,请检查您尝试访问的元素是否在 iframe 等内部。或者定位器可能不是唯一的等。
要打印 href 属性的部分值,即 zzde7e35d-8d9d-4763-95d2-9198684abb12
,您需要引入 WebDriverWait for the
使用LINK_TEXT:
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.LINK_TEXT, "Yes"))).get_attribute("href").split("/")[3])
使用CSS_SELECTOR:
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "a.Blue-Button[data-type='patch'][data-disable-with='Waiting'][href*='market']"))).get_attribute("href").split("/")[3])
使用 XPATH:
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//a[@class='Blue-Button' and @data-type='patch'][@data-disable-with='Waiting' and contains(@href, 'market')]"))).get_attribute("href").split("/")[-1])
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
You can find a relevant detailed discussion in