【问题标题】:Finding web element of dynamic websites using selenium python使用 selenium python 查找动态网站的 web 元素
【发布时间】:2020-09-23 21:50:52
【问题描述】:

我想根据 Web 元素(xpath、类等)抓取少数字段的文本。

<div class = myOnlyElement>
  <div> ......
    <div class = afafasf> ......</div>
    <div class = klklkl> ......
      <div class = qwqwqwq> ......
        <div class = reaction> text i need</div>
      </div>
    </div>
  </div>
</div>

<div class = myElement>
  <div> ......
    <div class = dfdfdf> ......</div>
    <div class = ghgghghg> ......
      <div class = erererere> ......
        <div class = reaction> text i don't need</div>
      </div>
    </div>
  </div>
</div>

假设我有这样的元素后端。我发现像这样的元素:

myelem = driver.find_element_by_classname('myOnlyElement')

现在我只想用我需要的文本选择类“反应”。 我正在这样做:

myelem.find_element_by_classname('reaction')

如果这个类存在,它会捕获它,但在某些情况下它适用于class = "reaction",其文本是“我不需要的文本”

希望我已经清楚地提到了我的问题。你能帮帮我吗

【问题讨论】:

  • driver.find_element_by_class_name 是正确的语法。
  • 也只需检查您是否有骨髓。或者使用等待。
  • 您可以使用 find 元素来获取与该类匹配的元素数组...然后迭代并获取 InnerHTML: thiselement.get_attribute('innerHTML') 以确定它是您需要还是不需要的文本'不需要。
  • 问题是每当我访问任何链接时,我都想从第一个元素中获取信息。如果它存在与否。如果元素存在,则获取文本,如果元素不存在,则打印“无文本”

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

我的朋友,最好的解决方案是在网页上单击鼠标右键,您可以在其中看到文字。右键单击 DOM 检查器,然后单击 Copy -> Copy Full XPath value。那么您可能需要执行 .text .source 来获取这些值。但试着玩一下。

【讨论】:

  • 感谢您的帮助。但是 fullXPATH 在动态网站的情况下不起作用。它不断变化。
  • 不幸的是,这是真的……对不起我的朋友
【解决方案2】:

要打印文本我需要的文本,您可以使用以下任一Locator Strategies

  • 使用css_selectorget_attribute()

    print(driver.find_element_by_css_selector("div.myOnlyElement div.reaction").get_attribute("innerHTML"))
    
  • 使用xpathtext 属性:

    print(driver.find_element_by_xpath("//div[@class='myOnlyElement']//div[@class='reaction']").text)
    

理想情况下,要打印文本我需要的文本,您必须为visibility_of_element_located() 诱导WebDriverWait,您可以使用以下任一Locator Strategies

  • 使用CSS_SELECTORget_attribute()

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.myOnlyElement div.reaction"))).get_attribute("innerHTML"))
    
  • 使用XPATHtext属性:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='myOnlyElement']//div[@class='reaction']"))).text)
    
  • 注意:您必须添加以下导入:

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

您可以在How to retrieve the text of a WebElement using Selenium - Python找到相关讨论


结尾

链接到有用的文档:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多