【问题标题】:Cannot get HTML to match inspect page even using selenium - Python 3即使使用 selenium 也无法让 HTML 匹配检查页面 - Python 3
【发布时间】:2020-08-03 16:12:03
【问题描述】:

我对编程很陌生,所以我只是想写一个有趣的程序来做一些网页抓取。我和我的女朋友正在玩动物穿越,并正在尝试玩萝卜游戏。有一个网页,人们可以在其中列出岛上萝卜的价格。我想编写代码来抓取页面,确定每个人在卖多少铃铛,然后如果有人列出超过 500 个铃铛,然后通过文本或电子邮件通知我。

我在这里停留在第 1 步。

我想抓取页面的HTML,并使用它识别铃铛。我最初尝试使用 BS4,但发现由于页面是动态的并且使用了一些动态的 java 元素,我不得不改用 selenium。

这是我要识别的HTML

<\div data-v-dee358f6="" class="flex flex-row items-center justify-self-center">
    <\img data-v-dee358f6="" src="/img/turnip.0cf2478d.png" class="w-6 object-scale-down">
    <\p data-v-dee358f6="" class="ml-2">73 Bells<\p>
<\div>

我想抓取 ml-2 类的任何内容,以便我可以提取列出钟声部分的代码。我使用以下基本代码尝试了各种方法来做到这一点:

#Turnip notifier
#Reads the island page on the turnip exchange and sends a text message when an island goes above 500 bells

from selenium.webdriver import Firefox

webdriver = 'C:\\path'

driver = Firefox(webdriver)

#Open up turnip.exchange URL

url = "https://turnip.exchange/islands"

driver.get(url)

element = driver.find_element_by_class_name('ml-2')

HTML = element.get_attribute('outerHTML')

print(HTML)

这将返回 HTML 但属于不同的类。然后我尝试了 CSS selectorxPATH 等...等...每个都表示没有元素。

然后我尝试拉取整个页面的HTML,只是为了看看我正在处理什么,所以我的代码现在看起来像这样:

#Turnip notifier
#Reads the island page on the turnip exchange and sends a text message when an island goes above 500 bells

from selenium.webdriver import Firefox

webdriver = 'C:\\path'

driver = Firefox(webdriver)

#Open up turnip.exchange URL

url = "https://turnip.exchange/islands"

driver.get(url)

HTML = driver.execute_script("return document.documentElement.outerHTML;")

print(HTML)

这会打印HTML,但不是针对页面,因为它看起来是实时的。它似乎主要是格式化之类的东西。因此,即使使用 Selenium 打开站点,我似乎仍然没有抓取出现在检查元素中的实时页面。

有什么想法吗?一旦我可以提取包含铃铛数量的代码,我很确定我知道从那里去哪里创建一个列表/字典和存储值,但我实际上找不到铃铛目前。

【问题讨论】:

    标签: python html css selenium selenium-webdriver


    【解决方案1】:

    如果您想获得所有铃铛列表的列表,您可以从这里获得:

    bells_list = WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".note p.ml-2")))
    
    for bells in bells_list:
        print(bells.text)
    

    在您的 driver.get(url) 行之后添加它。这将使用等待,直到准备好找到元素并检索信息。

    您需要添加这些导入:

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

    【讨论】:

    • 太棒了!这成功了。不,我只需要查看代码并弄清楚它是如何工作的 :)
    • 如果一切顺利,请接受我的回答,如果您还有其他问题,请告诉我。
    猜你喜欢
    • 2021-09-22
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多