在python中使用selenium获取元素数组

在python中使用selenium获取元素数组,python,selenium,xpath,css-selectors,webdriverwait,Python,Selenium,Xpath,Css Selectors,Webdriverwait,我需要捕获一个元素列表:“要捕获的文本1”、“要捕获的文本2”。。。使用selenium和python抓取网页。 页面的HTML如下所示: <div class="contenedor" style="overflow:auto; padding: 6px;"> <div style="width: 75px;"> <p class="line1"> <a href="http://www.somelink

我需要捕获一个元素列表:“要捕获的文本1”、“要捕获的文本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>

感谢您的帮助

与其使用
find\u element\u by\u xpath
方法,不如使用
find\u elements
方法,该方法将为您提供多个元素

另外,您可以使用
class=“gensmall”>
而不是Xpath来获取文本(如果该类存在于所有
a
标记中)

看看这个

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

让我知道这是否有效。

不要使用
find\u element\u by\u xpath
方法,而是使用
find\u elements
方法,该方法将为您提供多个元素

另外,您可以使用
class=“gensmall”>
而不是Xpath来获取文本(如果该类存在于所有
a
标记中)

看看这个

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

让我知道这是否有效。

要提取文本,例如,文本捕获1文本捕获2等,您必须诱导WebDriverWait以实现所有元素的
可见性()

  • 使用
    CSS\u选择器

    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
    

要提取文本,例如,文本捕获1文本捕获2等,您必须诱导WebDriverWait,以实现所有元素的
可见性()

  • 使用
    CSS\u选择器

    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
    

按类别名称(“gensmall”)查找元素
按类别名称(“gensmall”)查找元素