即使使用硒也无法使HTML匹配检查页面-Python 3

时间:2020-04-21 01:38:41

标签: python html css selenium selenium-webdriver

我一般来说对编程还是很陌生的,所以我只是想编写一个有趣的程序来进行网络爬虫。我和我的女友正在玩动物穿越,并试图玩萝卜游戏。在一个网页上,人们列出了他们岛屿上的萝卜价格。我想编写代码来抓取页面,确定每个人要卖多少个铃铛,如果有人列出了500个以上的铃铛,则通过文本或电子邮件通知我。

我在这里停留在第一步。

我想抓取页面的HTML,并使用它来识别铃声。我最初尝试使用BS4,但是发现由于页面是动态的并且使用了一些动态的Java元素,因此我不得不使用硒。

这是我要确定的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打开站点,似乎我仍未抓住显示在inspect元素中的实时页面。

有什么想法吗?一旦我可以提取包含铃铛数量的代码,就可以确定要创建列表/字典并存储值,然后就可以确定从那里去了,但我实际上找不到铃铛了。当前。

1 个答案:

答案 0 :(得分: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