我使用Python与selenium(PhantomJS webdriver)来解析网站,我有问题 .
我想从这个广播网站获得当前的歌曲:http://www.eskago.pl/radio/eska-warszawa .
XPath的:
/html/body/div[3]/div[1]/section[2]/div/div/div[2]/ul/li[2]/a[2]
该xpath不适用于python selenium
错误:
Traceback(最近一次调用最后一次):文件“parser4.py”,第41行,在p.loop()文件“parser4.py”,第37行,在循环self.eska(self.url_eskawarszawa)文件“parser4.py” “,第27行,在eska driver.find_element_by_xpath('/ html / body / div [3] / div [1] / section [2] / div / div / div [2] / ul / li [2] / a [ 2]')文件“/usr/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py”,第230行,在find_element_by_xpath中返回self.find_element(by = By.XPATH,value = xpath)文件“/usr/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py”,第662行,在find_element中{'使用':by,'value':value})['value']文件“/usr/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py”,第173行,执行self.error_handler.check_response(response)文件“/usr/lib/python2.7/ site-packages / selenium / webdriver / remote / errorhandler.py“,第164行,在check_response中引发exception_class(消息,屏幕,堆栈跟踪)selenium.common.exceptions.NoSuchElementException:消息:u'{”errorMessage“:”无法找到元素与xpath '/ html / body / div [3] / div [1] / section [2] / div / div / div [2] / ul / li [2] / a [2] '“,”请求“:{”报头“:{”接受“:”应用/ JSON“‘接受编码’:‘同一性’,‘连接’:‘关闭’,‘内容长度’:‘148’,”内容类型“:” 应用/ JSON;字符集= UTF-8" , “主机”: “127.0.0.1:55583","User-Agent":"Python-urllib/2.7"},"httpVersion":"1.1”,”方法“:”POST“,”post“:”{\“using \”:\“xpath \”,\“sessionId \”:\“e2fa7700-1bea-11e4-bd11-83e129ae286e \”,\“value \” :\“/ html / body / div [3] / div [1] / section [2] / div / div / div [2] / ul / li [2] / a [2] \”}“,”url “:”/元件”, “urlParsed”:{ “锚”: “”, “查询”: “”, “文件”: “元件”, “目录”: “/”, “路径”: “/元素” , “相对”: “/元件”, “端口”: “”, “宿主”: “”, “密码”: “”, “用户”: “”, “用户信息”: “”, “权威”:” “ ”协议“: ”“, ”源“: ”/元件“, ”queryKey“:{}, ”块“:[ ”元件“]} ”urlOriginal“:”/会话/ e2fa7700-1bea-11e4- bd11-83e129ae286e / element“}}';屏幕截图:通过屏幕提供
有谁知道这有什么问题?
--------------------------------------
编辑:thx家伙的答案我终于找到了我的问题的解决方案 . xpath很好(但实际上很脆弱)
我使用firefox驱动程序,我看到问题 - 广告 .
我不得不跳过它们,我决定使用另一个没有这个广告的页面:http://www.eskago.pl/radio
和finnaly,thx alecxe - 我用这个:
driver.find_element_by_xpath('//a[@class="radio-tab-button"]/span/strong').click()
element = driver.find_element_by_xpath('//p[@class="onAirStreamId_999"]/strong')
print element.text
并且工作完美 .
2 回答
你提供的xpath是一个非常脆弱的,现在想知道你得到
NoSuchElementException
异常 .相反,依赖于
a
标签的类名,里面有一首当前播放的歌曲:这是示例代码:
那么,另一种检索当前播放歌曲的方法是模仿网站为播放列表制作的JSONP响应:
正如alecxe所提到的,如果页面结构发生任何变化,那么xpath就会破裂 .
一个更简单的xpath表达式将起作用:
//li[2]/a[2]