定位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脚本不可行,暂时还找不到原因