Selenium无法在网页上获取一些数据

2024-04-19 20:26:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Selenium和Python来获取一些关于Chrome扩展的数据。我正在尝试获取位于this page的特定扩展的用户数。我正在使用以下代码:

from selenium import webdriver
from selenium.common.exceptions import ElementNotVisibleException, NoSuchElementException
import time  

def create_browser(first_page=None):
        print "Starting"
        browser = webdriver.Chrome('/home/user/ChromeDriver/chromedriver')
        if first_page:
            browser.get(first_page);
        print "Done."
        return browser


    def wait_find_element_by_xpath(driver, path):
        counter = 0
        while counter < 7:
            try:
                elem = driver.find_element_by_xpath(path)
                break
            except NoSuchElementException:
                time.sleep(1)
                counter += 1
                elem = None
        return elem

    URL = 'https://chrome.google.com/webstore/detail/id-vault/jlljbiieciifehccmokcpnmlklpaimpa/details' 

    browser = create_browser()
    browser.get(URL)
    time.sleep(7) 
    #Get number of users
    userStr = wait_find_element_by_xpath(browser, './/span[@class="webstore-f-g-He"]')
    #print "\n\n\n No. of Users: "
    #print userStr
    #print userStr.text
    #print "\n\n\n-----"
    noOfUserStr = userStr.text.replace(" users", "")
    noOfUsers = noOfUserStr.replace(",", "")
    users = int(noOfUsers)

我的问题是我无法获得特定页面的用户数。相反,我得到了错误:ValueError: invalid literal for int() with base 10: ''

我觉得这很奇怪,因为代码可以很好地与其他扩展配合使用。此外,即使您单击“查看源”(右键单击->检查元素),也可以看到源中的用户数(在“发件人”字段之后),但我仍然无法获取该值。谁能帮我解决这个问题吗?在


Tags: importbrowserbytimecounterpageelementfind
1条回答
网友
1楼 · 发布于 2024-04-19 20:26:48

问题是,对于这个特定的扩展,由于“from”url的长度,用户数量是不可见的。硒通常只作用于文档中的可见元素。

我建议通过javascript执行获取此值:

userStr = browser.execute_script("return document.getElementsByClassName('webstore-f-g-He')[0].textContent")

相关问题 更多 >