Selenium(Python)查找网页上的所有可选窗口

时间:2018-04-11 15:50:05

标签: python selenium-webdriver ember.js beautifulsoup arcgis

所以我试图在这里解析一个页面上的所有href链接:https://data-wake.opendata.arcgis.com/datasets但是我注意到我正在寻找的链接都没有从我的python代码返回:

driver = webdriver.PhantomJS("C:\Users\Jlong\Desktop\phantomjs.exe")
driver.get(r"https://data-wake.opendata.arcgis.com/datasets")
pagesource = driver.page_source
bsobj = BeautifulSoup(pagesource,'lxml')
for line in bsobj.find_all('a'):
    print(line.get('href'))

以下是chromes检查的html片段: Html Inspect

预期的结果是返回如下内容:

" /数据集/ wakeforestnc ::状态系统用街道"

我还注意到在页面上运行了一个名为Ember application.js的东西,我想这可能会阻止我访问深嵌入主ember标记的href属性。我不喜欢使用ember或如何解析像这样的复杂页面,任何帮助都将非常感谢!

2 个答案:

答案 0 :(得分:0)

Ember.js用于构建SPA(单页应用程序),通常是客户端呈现。

我的猜测是你的代码在页面加载后但在SPA渲染之前搜索所有锚点。

您的代码需要等待Ember应用程序呈现,可能要等到body元素具有类ember-application

答案 1 :(得分:0)

我相信你在前端渲染之前得到了page_source。

我通过chromedriver获取这些链接(对于phantomjs应该是相同的),只需在访问wait之前添加一个简单的page_source

from selenium import webdriver
from bs4 import BeautifulSoup
import time

driver = webdriver.Chrome()
driver.get("https://data-wake.opendata.arcgis.com/datasets")
time.sleep(5)
soup = BeautifulSoup(driver.page_source,'lxml')
for line in soup.find('ul', {'id':'search-results'}).find_all('a', {'class': 'result-name ember-view'}):
    print(line.get('href'))

<强>输出

/datasets/tofv::fuquay-varina-utility-as-built-drawings
/datasets/tofv::private-sewer-manhole
/datasets/tofv::fuquay-varina-town-development
/datasets/tofv::blowoff-valve
/datasets/tofv::fuquay-varina-zoning
/datasets/tofv::drainage-point
/datasets/tofv::gravity-sewer-line
/datasets/tofv::water-meter-vault
/datasets/tofv::fuquay-varina-sidewalks
/datasets/tofv::water-line