selenium找不到下拉框的选项元素

bug description:

爬虫脚本执行到点击完下拉框后,无法根据css_selector中的路径,找到   下拉框中另一非默认选项。

下拉框示例:

这里“选择一个”为默认选项,其它选项如下

我们想要选中的是“等于”, 利用chrome的开发者工具,定位到下拉框所在的html标签位置,此标签为动态变化标签,动态变化是指当选中不同选项时,此标签会发生改变,如从

 <div class="select" title="选择一个">选择一个</div>

变为

 <div class="select" title="等于">等于</div>

那么,想在点击“等于” 选项之前 定位“等于”选项元素  就无法做到(在下拉框展开的情况下,点击开发者select element时下拉框会收回去)

然后我就纠结于怎样选择这个“等于”选项,进行以下尝试:

①用select方法

参考  https://www.cnblogs.com/fengyiru6369/p/7088836.html

但由于我遇到的不是<select>标签,是<div>,且下拉框的选项不是静态显示的,此方法不能用

②考虑用模拟键盘键(↓+ENTER)的形式选择选项

参考 https://www.cnblogs.com/mengyu/p/6942584.html

browser.find_element_by_css_selector('div...').send_keys(Keys.DOWN).send_keys(Keys.ENTER)

报错,原因不清楚。键盘键的组合使用可能不能这样用

③用坐标定位

考虑坐标定位不够稳定,而我们的爬虫要够健壮,因为爬的数据量比较大。所以pass掉这一方案

Solution:

最后请教了前端朋友,问题的解决其实很简单,要让想要选择的选项在页面上显示出来 (点开下拉框),此时在开发者工具的html框架处,用command+F搜索“等于”,于是发现除了我们之前纠结的那个地方的<div>动态标签是与此下拉框的选项有关的,还有html的<body>最底部出现了一个<div>标签(说“出现”,是因为在下拉框为收起状态时,此标签是不存在的),里面能看到各选项的内容,此时再用Copy selector复制css路径,就OK了。

而原有脚本报错是因为对方网站的前端页面有改动,导致找不到element(傍晚时对方又改回去了。。。心累)

猜你喜欢

转载自blog.csdn.net/qq_33936417/article/details/86549181