【问题标题】:Get an array of elements with selenium in python在python中获取带有硒的元素数组
【发布时间】:2019-07-15 23:12:12
【问题描述】:

我需要捕获一个元素列表:“TEXT TO CAPTURE 1”,“TEXT TO CAPTURE 2”,...用 selenium 和 python 抓取网页。 页面的 HTML 如下:

<div class="contenedor" style="overflow:auto; padding: 6px;">
    <div style="width: 75px;">
        <p class="line1">
            <a href="http://www.somelink1.com/"><img src="https://www.somelink2.com" class="yborder" alt="Name"></a>
        </p>
        <p class="line1" style="align: center;">              
            <a href="www.somelink3.com" class="gensmall">TEXT TO CAPTURE 1</a>
        </p>
    </div>
    <div style="width: 75px;">
        <p class="line1">
            <a href="www.somelink4.com"><img src="hwww.somelink5.com" class="yborder" alt="Dana Vespoli"></a>
        </p>
        <p class="line1" style="align: center;">              
            <a href="www.somelink6.com" class="gensmall">TEXT TO CAPTURE 2</a>
        </p>
    </div>

    ... others numbers of same <div> fields    ....

</div>

元素的数量每天都在变化我打开页面所以元素的数量是不确定的。

我只能得到第一个元素:

driver.find_element_by_xpath("//p[contains(@class, 'line1')]/following::a")

感谢您的帮助

【问题讨论】:

    标签: python selenium xpath css-selectors webdriverwait


    【解决方案1】:

    不要使用find_element_by_xpath 方法,而是使用find_elements 方法,它会为您提供多个元素。

    另外,您可以使用class="gensmall"&gt; 代替Xpath 来获取文本(如果该类存在于所有a 标记中。

    看看这个

    list_of_elements = driver.find_elements_by_css_selector('a. gensmall')
    for i in len(list_of_elements):
        print (i.text)
    

    让我知道这是否有效。

    【讨论】:

    • find_elements_by_class_name('gensmall')
    【解决方案2】:

    提取文本,例如TEXT TO CAPTURE 1TEXT TO CAPTURE 2 等,您必须为 visibility_of_all_elements_located() 诱导 WebDriverWait,您可以使用以下任一方法解决方案:

    • 使用CSS_SELECTOR

      print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.contenedor p.line1>a.gensmall")))])
      
    • 使用XPATH

      print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='contenedor']//p[@class='line1']/a[@class='gensmall']")))])
      
    • 注意:您必须添加以下导入:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多