【发布时间】:2020-06-20 16:08:27
【问题描述】:
我在 Selenium 通过 ID 或链接文本定位一组特定选项卡链接元素时遇到问题。使用 Selenium,我尝试单击/循环浏览每个选项卡(“描述和价格”、“完成”和“注释”)并抓取后续表格(参见屏幕截图)。
以下是选项卡的 HTML。当我的循环第一次加载页面时,“描述和价格”选项卡处于活动状态,随后的表很容易用 BeautifulSoup 抓取(通过搜索具有特定表 ID 的表)。但是,在“D+P”表被抓取后,我尝试使用 Selenium 单击“完成”选项卡,我收到 NoSucElementException 错误。
我希望能够使用链接文本方法单击“完成”和“注释”选项卡(因为选项卡因页面而异)。这会导致错误。
driver.find_element_by_link_text("FINISH").click()
我也试过ID方法,但也失败了。
driver.find_element_by_id("cphMain_tbTabs_rptTabs_lnkTab_1").click()
我还尝试了各种等待方法以防元素尚未加载,尽管在尝试等待元素 ID 时遇到相同的错误,因为它找不到 ID。
另一个考虑因素是我在 html 中没有看到任何提及 iframe。
<div id="cphMain_upTabs">
<div id="cphMain_divTabs" class="tabs">
<div id="cphMain_tbTabs_divTabs">
<ul class="tabset">
<li><a id="cphMain_tbTabs_rptTabs_lnkTab_0" class="tab active" href="javascript:__doPostBack('ctl00$cphMain$tbTabs$rptTabs$ctl01$lnkTab','')" style="font-weight:bold;">DESCRIPTION AND PRICE</a></li>
<li><a id="cphMain_tbTabs_rptTabs_lnkTab_1" class="tab" href="javascript:__doPostBack('ctl00$cphMain$tbTabs$rptTabs$ctl02$lnkTab','')" style="font-weight:normal;">FINISH</a></li>
<li><a id="cphMain_tbTabs_rptTabs_lnkTab_2" class="tab" href="javascript:__doPostBack('ctl00$cphMain$tbTabs$rptTabs$ctl04$lnkTab','')" style="font-weight:normal;">NOTES</a></li>
</ul>
【问题讨论】:
-
是否可以分享页面网址让我看看?根据您的尝试,我不明白为什么它不起作用,所以也许有一些我们没有看到的东西?
-
页面 url 在登录后面,所以我无法分享所有信息。但是,我想我找到了使用 Try/Except 逻辑的解决方案。无论出于何种原因,问题似乎与我试图抓取的列表中的第一页有关。使用这种逻辑,我们会传递第一页,然后所有后续页面都会按预期进行抓取。
标签: python html selenium beautifulsoup