Python Selenium 抓取Shadow Dom内部元素方法更新

By Mejias

背景:

应团队的PMP的要求,为自己的Team开发了一个内部网站信息抓取的工具(整体代码展示见文章末尾,可能稍微有点长)。上上周周写完测试后推给了大家,没有什么问题。今天Team的一个小伙伴突然告诉我报错,显示是Chrome Driver与Chrome版本不对,搜索Chrome://version,才发现是Chrome自动升级了。这样原来版本的Chrome driver就不支持了,导致程序报错。

 

在Chrome Driver官网here重新搜索了版本匹配的Chrome Driver并下载安装好之后,再次运行程序,发现前面都运行的很好直到后面首尾部分报错如下:

报错显示的是下面这里出了问题:

def control_in_shadow(driver,js):

    shadow = driver.execute_script(js)

    return shadow #返回的对象在这里

js = 'return document.querySelector("#ra-shadow-root").shadowRoot'

shadow= control_in_shadow(driver,js)

shadow.find_element(By.ID,'ra-asin-list-count-input').clear()

shadow.find_element(By.ID,'ra-asin-list-count-input').send_keys('1000')

shadow.find_element(By.ID,'ra-asin-list-load-btn').click()

上面的代码访问下列Shadow Doml里的元素。

 

采用的方法就是常说的三步法:

定位到Shadow Dom的Host节点 =》 使用.shadowRoot属性定位到根节点 =》

直接通过页面Element的方法访问Shadow Dom内部的元素。这种方法在未更新chrome driver 的版本之前一直用的很好的。

但是在更新了Chrome版本和chrome driver版本之后就会报错了。原来的方法在新的chrome driver并不适用。于是在收到小伙伴的反馈后,就需要测试代码问题以及修改和Refine了。

测试&发现问题:

首先根据上面的报错可以定位到是下面的代码出了问题。

​
def control_in_shadow(driver,js):

    shadow = driver.execute_script(js)

    return shadow #返回的对象在这里

js = 'return document.querySelector("#ra-shadow-root&#
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值