我正在尝试从动态生成的网页中获取数据。从我的搜索中我发现Selenium可能是最好的选择,但我遇到了一些问题。我想从中获取数据的网页是 this one我的测试搜索数据是“10403782”
到目前为止,我有以下源代码,可以找到搜索栏和搜索,但你可以看到结果返回多个项目,我试图找到没有小房子的那个左边是灰色的。
# Initial connection and search
driver.get("http://firmaopslag.dk")
element = driver.find_element_by_id("firmanavn")
element.send_keys("10403782")
element.send_keys(Keys.RETURN)
# On search result page, find the result with the house
searchResults = driver.find_element_by_id("searchresult")
我认为找到蓝屋的一种方法是查看颜色值,循环浏览所有结果项,找到没有与灰色颜色匹配的颜色的颜色。但是,每当我按照上面的情况进行搜索时,searchResults总是为空。我尝试按类名,ID,标签搜索..似乎没有任何东西可以找到结果。基本上正如我所提到的,我希望用蓝色房子找到结果并点击它。
编辑: 我认为我最大的问题是,一旦完成搜索,我需要查看一个不同的网页或者与我从初始页面到目前为止所拥有的不同元素
同样对于最后一部分,一旦我在正确的页面上,我认为beautifulsoup是获取我感兴趣的数据的最佳方式,不是吗?
答案 0 :(得分:1)
您可以查看color
属性中的style
:
# Initial connection and search
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("http://firmaopslag.dk")
element = driver.find_element_by_id("firmanavn")
element.send_keys("10403782")
element.send_keys(Keys.RETURN)
# wait for search results to appear
wait = WebDriverWait(driver, 10)
searchResults = wait.until(EC.presence_of_element_located((By.ID, "searchresult")))
for blue_house_result in searchResults.find_elements_by_xpath(".//button[.//span[contains(@class, 'glyphicon-home') and contains(@style, 'color: #002954;')]]"):
label = blue_house_result.find_element_by_tag_name("h4")
print(label.text)
请注意,我还为搜索结果添加了wait,以便在执行搜索后显示。
同样对于最后一部分,一旦我在正确的页面上,我认为beautifulsoup是获取我感兴趣的数据的最佳方式,不是吗?
您可以使用BeautifulSoup
进一步解析driver.page_source
中的HTML,但不一定需要,因为您可以使用selenium
找到元素。