最近在做一个selenium的测试,对网页进行爬取,遇到了很多问题。下面来总结一下。
我在测试的时候,明明通过xpath或者css匹配到了元素,但是就是无法进行点击。研究了之后,发现是浏览器的支持性不太好导致的。
首先,当出现这个问题的时候,我们要学会排除可能导致出错的原因,第一点就是可能是frame导致的,当你发现前端代码出现iframe标签时,要想定位里面的元素,必须进行表单切换。
切换的方法是switch_to_frame()
如果表单切换了还是定位不到,例如需要通过点击加号才能展开的无序列表,由于浏览器支持性不好,元素定位会出现问题。那么此时有两种解决办法的思路:
1.根据元素的坐标进行定位,然后通过移动这个坐标从而获取真正需要点击的位置。
获取元素坐标的方法就是
element_location = driver.find_element_by_xpath("元素xpath路径").location
横坐标 = element_location['x']
纵坐标 = element_location['y']
然后进行坐标的移动或者直接按照坐标定位
2.对于checkbox、radiobox这种的,如果浏览器支持不好鼠标根本没办法点击
解决办法就是先通过xpath定位到这个元素,然后发送一个空格就选中了。
# checkbox
driver.find_element_by_xpath('').click() # click
driver.find_element_by_xpath('').send_keys(Keys.SPACE) # send space
# radio
driver.find_element_by_xpath('').send_keys(Keys.SPACE)