【问题标题】:Trouble fetching a link from a dynamic webpage从动态网页获取链接时遇到问题
【发布时间】:2018-06-06 20:45:27
【问题描述】:

我在 python 中结合 selenium 编写了一个脚本来解析网页中的某个链接。该链接位于iframe 内。我尝试切换到它,但无法从中读取内容以获取我所追求的特定链接。

这里是如何到达那里:

  1. 有一个免费的登录链接。

  2. 登录后网站自动跳转到所需内容的首页。

  3. 那里的名字(成员)很少,他们的每个个人资料都有链接。

  4. 进入该个人资料页面后,有一个指向他们当前公司的链接(位于专业经验下),这是我希望解析的。

第一个个人资料中所需的链接(根据专业经验)看起来像like this

This is the log in link

这是我迄今为止尝试过的脚本:

from selenium import webdriver
from urllib.parse import urljoin
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

link = "https://www.xing.com"

driver = webdriver.Chrome()
driver.get("replace with above link")
wait = WebDriverWait(driver, 10)

wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#login_form_username"))).send_keys("user")
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#login_form_password"))).send_keys("pass",Keys.RETURN)

links = [urljoin(link,items.find_element_by_css_selector(".user-name").get_attribute("href")) for items in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".contact")))]
for link in links:
    driver.get(link)
    name = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "h2 span"))).text
    wait.until(EC.frame_to_be_available_and_switch_to_it(driver.find_element_by_css_selector("#tab-content")))
    #I get timeout exception in the following line
    link = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".job-company-name a"))).text
    print(name,link)

我不知道这是否有帮助。无论如何,link to the source

【问题讨论】:

  • 当前输出是多少?您可以成功切换到框架,但在ilink 定义上获得NoSuchElementException
  • 在您的回答中,您使用 @id 搜索来查找 iframe,而在您的问题中 - 按标签名称搜索...如果页面上有多个 iframe,您可能切换到不包含所需元素的错误iframe
  • 先生,我两个都试过了。
  • 如果不查看页面源,很难判断出什么问题。恕我直言,您的解决方案不是处理 iframe 的最佳方式... :)
  • 这实际上不是一个解决方案,只是一种解决方法。

标签: python python-3.x selenium selenium-webdriver web-scraping


【解决方案1】:

看来我已经找到了解决问题的方法。我准备拿出我的答案如果有更好的解决方案出现:

links = [urljoin(link,items.find_element_by_css_selector(".user-name").get_attribute("href")) for items in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".contact")))]
for link in links:
    driver.get(link)
    name = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "h2 span"))).text
    ilink = driver.find_element_by_css_selector("#tab-content").get_attribute("src")
    driver.get(ilink)   #this is what I did to get around that
    try:
        link = driver.find_element_by_css_selector(".job-company-name a").text
    except Exception: link = ""
    print(name,link)

我没有切换到 iframe,而是解析了 iframe 中的链接并加以利用。这不是我所期望的解决方案,但它确实有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 2023-03-24
    相关资源
    最近更新 更多