我有一个处理不同数据的Python代码。例如,它从以下HTML代码中删除网站
:
<a data-ix="show-popup-on-click" target="_blank" rel="nofollow" href="https://mylink.org/" class="button full w-button" style="transition: all 0.4s ease 0s;">Website</a>
它工作正常,但现在失败了,出现了以下错误:
NoSuchelementException:消息:{“errorMessage”:“找不到链接文本为‘网站’的元素”,“请求”:{“headers”:{“Accept”:“Application/JSON”,“Accept-Encoding”:“Identity”,“Connection”:“Close”,“Content-Length”:“95”,“Content-Type”:“Application/JSON;Charset=UTF-8”,“Host”:“127.0.0.1:40581”,“User-Agent”:“Python http Auth”},“HttpVersion”6A-11E8-AD3A-6121F74A30F4\“,\”值\“:\”网站\“}”,“URL”:“/element”,“URLParsed”:{“锚”:“”“,”查询“:”“”,“文件”:“元素”,“目录”:“/”,“路径”:“/element”,“相对”:“/element”,“端口”:“主机”:“”“”“密码”:“”用户“:”“”“”“用户信息”:“”“”“”权限“:”“”“”协议“:”“”“源”:“/element”,“查询键”:{},“块”:“[”element“]},”:“/Session/A7A441F0-0F6A-11E8-AD3A-6121F74A30F4/element”}}截图:可通过屏幕获得
这是我的代码:
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.set_window_size(1120, 550)
driver.get(link)
driver.implicitly_wait(10)
website = driver.find_element_by_link_text("Website").get_attribute("href")
我做错了什么?
更新:
<div class="column-space w-col w-col-4">
<a data-ix="show-popup-on-click" target="_blank"
rel="nofollow" href="https://example.com/"
class="button full w-button"
style="transition: all 0.4s ease 0s;">Website</a>
<div class="space big"></div>
<a target="_blank" rel="nofollow"
href="https://example.com/storage/b/2/0/2/WhitepaperLive.pdf"
class="button-2 w-button">Whitepaper</a>
<div class="space big"></div>
<a class="button-2 w-condition-invisible w-button">Program</a>
<div class="space big w-condition-invisible"></div>
<div>
<div class="div-block-4 w-clearfix">
<div class="div-block-2">Token:</div>
<div class="div-block-5 w-clearfix">
<div class="text-block-12">UTC</div>
</div>
</div>
<div class="div-block-4 w-clearfix">
<div class="div-block-2">Price:</div>
<div class="div-block-5 w-clearfix">
<div class="text-block-12">1 LUC=0,05 USD</div>
</div>
</div>
<div class="div-block-4 w-clearfix">
<div class="div-block-2">Buy with:</div>
<div class="div-block-5 w-clearfix">
<div class="text-block-12">USD, EUR</div>
</div>
</div>
<div class="div-block-4 w-clearfix">
<div class="div-block-2">Platform:</div>
<div class="div-block-5 w-clearfix">
<div class="text-block-12">MyPlatform</div>
</div>
</div>
<div class="div-block-4 w-clearfix w-condition-invisible">
<div class="div-block-2">KYC:</div>
<div class="div-block-5 w-clearfix">
<div class="text-block-12">No</div>
</div>
</div>
<div class="div-block-4 w-clearfix">
<div class="div-block-2">KYC:</div>
<div class="div-block-5 w-clearfix">
<div class="text-block-12">Yes</div>
</div>
</div>
<div class="div-block-4 w-clearfix">
<div class="div-block-2">Location:</div>
<div class="div-block-5 w-clearfix">
<div class="text-block-12">Malta</div>
</div>
</div>
<div class="div-block-4 w-clearfix">
<div class="div-block-2">Can't join:</div>
<div class="div-block-5 w-clearfix">
<div class="text-block-12">USA</div>
</div>
</div>
<div class="space big"></div>
<div class="div-block-4 w-clearfix">
<div class="div-block-2">Start:</div>
<div class="div-block-5 w-clearfix">
<div class="text-block-12">January 25, 2018</div>
</div>
</div>
<div class="div-block-4 w-clearfix">
<div class="div-block-2">End:</div>
<div class="div-block-5 w-clearfix">
<div class="text-block-12">February 5, 2018</div>
</div>
</div>
<div class="space big"></div>
<div class="div-block-4 w-clearfix">
<div class="div-block-2">Start2:</div>
<div class="div-block-5 w-clearfix">
<div class="text-block-12">February 12, 2018</div>
</div>
</div>
<div class="div-block-4 w-clearfix">
<div class="div-block-2">End2:</div>
<div class="div-block-5 w-clearfix">
<div class="text-block-12">March 5, 2018</div>
</div>
</div>
<div>
<div class="div-block-33">
<div class="space big"></div>
<div>
<a target="_blank" rel="nofollow"
class="button green full w-condition-invisible w-button">JOIN WHITELIST NOW »</a>
<div class="div-block-34">
<a target="_blank" rel="nofollow" href="http://we-do-not-have-slack.com"
class="link-block-2 w-inline-block">
<img src="https://global-uploads.webflow.com/903_slack-symbol.png" alt="ICO Slack link">
</a>
<a target="_blank" rel="nofollow" href="https://twitter.com/live" class="link-block-2 w-inline-block">
<img src="https://global-uploads.webflow.com/f4000142b091_twitter%20(1).png" width="16" alt="ICO Twitter link">
</a>
<a target="_blank" rel="nofollow" href="https://t.me/live" class="link-block-2 w-inline-block">
<img src="https://global-uploads.webflow.com/790001798dfe_telegram.png" alt="ICO Telegram link">
</a>
<a target="_blank" rel="nofollow" href="http://we-do-not-have-GitHub.com" class="link-block-2 w-inline-block">
<img src="https://global-uploads.webflow.com/59cf77c1fb0edc0001b4b26a_github-logo.png" alt="ICO GitHun link">
</a>
<a target="_blank" rel="nofollow" href="https://www.facebook.com/Play2Live-504880049864038/" class="link-block-2 w-inline-block">
<img src="https://global-uploads.webflow.com/59cf77c1fb0edc0001b4b117/59d510290116ac0001964c8e_facebook.png" alt="Facebook link">
</a>
<a target="_blank" rel="nofollow" href="https://talk.org/index.php?topic=2381679.0" class="link-block-2 w-inline-block">
<img src="https://global-uploads.webflow.com/0011f8c3c_talk.jpg" alt="Talk link">
</a>
</div>
</div>
</div>
</div>
</div>
</div>
driver.get(link)
driver.implicitly_wait(10)
driver = webdriver.PhantomJS()
driver.implicitly_wait(10)
driver.get(link)
正如Ian in在评论中所说,隐式等待定位在这种情况下并不重要。
问题是定位器策略。
website = driver.find_element_by_link_text('Website').get_attribute('href')
在这种情况下,它找不到元素,这是一个链接样式为按钮与大写字母网站。它似乎不匹配HTML DOM(“网站”)中的链接文本,而是按钮上css计算样式呈现的文本网站。
另一种定位器策略,如css-selector或XPATH,在我看来可以提供更可靠的结果:
driver.find_element_by_xpath("//a[contains(text(),'Website')]").get_attribute("href")
关于这些元素的更多信息可以在这里找到:Selenium定位元素
问题内容: 我得到的错误,当我执行下面的代码: 第一次起作用,然后出现错误。我每次都创建变量,这是什么问题? 问题答案: 默认情况下,的将停止在所有爬虫完成它创建的扭曲反应器。 如果在每个迭代中创建,则应调用。 另一种选择是自己处理并使用反应堆。该文档有一个这样做的例子。
我试图运行ionic build Android--release命令来构建apk,但是我得到了这个错误 构建失败 总时间:2.623秒错误:cmd:命令失败,退出代码为1错误输出:失败:生成失败,出现异常。 错误:配置root项目'Android'时出现问题。您尚未接受以下SDK组件的许可协议:[Android SDK Platform25]。在构建项目之前,您需要接受许可协议,并使用Andro
问题内容: 我取这个页面与该请求库中的Node.js,并使用解析身体cheerio。 调用已解析的响应正文,发现该页面的title属性为: …什么时候应该: 我尝试将请求库的选项设置为include ,但这似乎并没有改变任何东西。 如何保留这些字符? 问题答案: 该页面似乎是用iso-8859-1编码的。您需要通过传递并使用诸如node- iconv之 类的东西来告诉您退回未编码的缓冲区。 如果要
我正在尝试使用NPM5.6.0在Windows 10上安装模块。当我进入npm安装时,我得到: 似乎节点sass安装错误。环境如下: Python版本:2.7.14 npm版本:5.6.0 节点版本:8.10.0 ruby版本: 2.3.3p222 (2016-11-21修订56859)[i386-mingw32] 系统:win10(x64) node-gyp: 3.6.2 而且我已经安装了Mic
我有一个单一的. rs文件。当我用编译它时,我得到一个错误: 我见过一些与此相关的话题,但没有一个能帮助我解决问题。
我正在写一个小的抓取程序,它导航到一个包含链接列表的页面, 它单击第一个链接,打开一个新页面,获取一些详细信息,然后导航回包含链接列表的页面,然后尝试查找下一个链接,但我得到: 组织。openqa。硒。StaleElementReferenceException:stale元素引用:元素未附加到页面文档 你知道我该怎么避免吗?