【问题标题】:How to print an href/URL using XPath?如何使用 XPath 打印 href/URL?
【发布时间】:2023-03-17 21:49:01
【问题描述】:

我的代码导航到一个网站,并且在该网站中有一篇包含其自己的链接/url/href 的文章。

我想打印这个字段。

我当前的代码突出显示它所在的容器,然后我尝试执行一个 for 循环来获取 href。

from selenium import webdriver
driver = webdriver.Chrome()
import time

url = 'https://library.ehaweb.org/eha/#!*menu=6*browseby=8*sortby=2*media=3*ce_id=2035*label=21986*ot_id=25553*marker=1283*featured=17286'
driver.get(url)
time.sleep(3)
page_source = driver.page_source

container=driver.find_element_by_xpath("//div[@class='list-box col-md-6 col-lg-6 col-xl-4 test']")
for j in container:
    link= j.find_element_by_css_selector('a').get_attribute('href')
    print(link)

【问题讨论】:

  • 这篇文章叫什么名字?

标签: python selenium web-scraping xpath


【解决方案1】:

如果我正确理解你想要什么,你只需要打印元素的子 (a) 属性:

link = driver.find_element_by_xpath("//div[@class='list-box col-md-6 col-lg-6 col-xl-4 test']/a").get_attribute("href")
print(link)

打印出来:

https://library.ehaweb.org/eha/2021/eha2021-virtual-congress/324511/hanny.al-samkari.pazopanib.for.severe.bleeding.and.transfusion-dependent.html?f=menu%3D6%2Abrowseby%3D8%2Asortby%3D2%2Amedia%3D3%2Ace_id%3D2035%2Alabel%3D21986%2Aot_id%3D25553%2Amarker%3D1283%2Afeatured%3D17286

如果要使用循环,则将container=driver.find_element_by_xpath("//div[@class='list-box col-md-6 col-lg-6 col-xl-4 test']")更改为

container=driver.find_elements_by_xpath("//div[@class='list-box col-md-6 col-lg-6 col-xl-4 test']")

对于这个元素,以下定位器就足够了:

//div[contains(@class, 'test')]/a

使用以下代码:

driver = webdriver.Chrome(executable_path='/snap/bin/chromium.chromedriver')
url = 'https://library.ehaweb.org/eha/#!*menu=6*browseby=8*sortby=2*media=3*ce_id=2035*label=21986*ot_id=25553*marker=1283*featured=17286'
driver.get(url)
driver.implicitly_wait(10)
container = driver.find_elements_by_xpath("//div[contains(@class, 'test')]")
for j in container:
    link = j.find_element_by_css_selector('a').get_attribute('href')
    print(link)
driver.close()

【讨论】:

【解决方案2】:

该页面包含大量内部 URL。要点击 EHA 2021 虚拟容器,可以使用以下代码。

eha_2021 = driver.find_element_by_css_selector('div#listing-main a')
eha_2021_link = eha_2021_link.get_attribute('href')
print(eha_2021_link)

如果你想点击COVID-19 Outbreak,你可以试试下面的代码。

代码:

covid_19_element = driver.find_element(By.ID, 'menu-8')
covid_19_url = covid_19_element.get_attribute('href')
print(covid_19_url)

建议:

尽量避免这种 xpath //div[@class='list-box col-md-6 col-lg-6 col-xl-4 test'] 这看起来有点动态,可能会改变区域。始终按以下顺序使用定位器:

  1. 身份证
  2. 姓名
  3. 标签名称
  4. 类名
  5. 链接文字
  6. 部分链接文本
  7. CSS 选择器
  8. XPATH

了解他们here

【讨论】:

    【解决方案3】:

    这对我获取 href 有用

    elems = driver.find_elements_by_xpath("//a[@href]")
    for elem in elems:
        print(elem.get_attribute("href"))
    

    遍历列表,获取每个元素并从中获取所需的属性值(在本例中为 href)。

    【讨论】:

    • 这有什么帮助? OP 不想要当前 URL,他想要网站中包含的文章的 URL
    • 最初的答案完全不同。现在它只是我答案的略微修改版本。
    猜你喜欢
    • 1970-01-01
    • 2018-08-31
    • 2020-04-28
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 2015-11-29
    相关资源
    最近更新 更多