定位display=none的元素

将百度搜索设置为每页显示20条,python代码如下:

#coding=utf-8

from selenium import webdriver

from selenium.webdriver.common.action_chains import ActionChains

import os,time

wb=webdriver.Firefox()

wb.get("http://www.baidu.com")

#定位设置

wb.find_element_by_xpath("/html/body/div[1]/div[1]/div/div[3]/a[8]")

#定位搜索设置

wb.find_element_by_link_text("搜索设置").click()

time.sleep(3)

#设置每页显示20条

tmp=wb.find_element_by_name("NR")

tmp.find_element_by_xpath("//option[@value='20']").click()

#点击保存设置按钮

wb.find_element_by_class_name("prefpanelgo").click()

wb.implicitly_wait(5)

#在弹出的窗口中点击确定

wb.switch_to_alert().accept()

#在搜索hello world查看结果

wb.find_element_by_id("kw").send_keys("hello world")

wb.find_element_by_id("su").click()

time.sleep(3)

wb.quit()

如果我们直接执行,会出现错误:


百度首页html


可以看到display:none,导致元素定位不到。

解决方法:

1.模仿鼠标行为

link=wb.find_element_by_xpath("/html/body/div[1]/div[1]/div/div[3]/a[8]")

ActionChains(wb).move_to_element(link).perform()

2.执行JavaScript脚本(暂时行不通)

js="document.getElementsByClassName('bdpfmenu').display='block';"

wb.execute_script(js)

不过,我试了很多display=none的情况:

(1)利用firebug等工具可以查看到页面有显示,只是代码默认为灰色


百度首页代码

(2)利用firebug等工具看不到页面中有显示,需点击加载过后才会有代码显显示


点击前网页代码


点击后网页代码

执行JavaScript脚本不可行,暂时还找不到原因

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容