selenium用css的方法,定位href=“javascript:;”
案例:www.baidu.com中的设置元素
<a id="s_usersetting_top" href="javascript:;" name="tj_settingicon" class="pf s-user-setting-top">
<span class="setting-text">设置</span>
</a>
通常我们看到id后,就可以用css的方法来定位了
find_element(By.CSS_SELECTOR,"#s_usersetting_top>span:nth-child(1)")
但是定位后发现不行,然后去chrome的console中查看是不是自己写错了,发现也没有错呀,为什么?
$('#s_usersetting_top>span:nth-child(1)')
init [span.setting-text, prevObject: init(1), context: document, selector: "#s_usersetting_top>span:nth-child(1)"]0: span.setting-textlength: 1prevObject: init [document, context: document]context: documentselector: "#s_usersetting_top>span:nth-child(1)"__proto__: Object(0)
分析
-
发现为什么id那里的的href是"javascript:;"
-
可能chrome自动帮我们解析了js,但是selenium中并没有帮我们解析
-
可以通过print(“driver.page_source”)打印出来
-
通过driver.page_source打印出来的结果,我们截取要的设置的内容
<div id="u">
<a class="toindex" href="/">百度首页</a>
<a href="javascript:;" name="tj_settingicon" class="pf">设置<i class="c-icon c-icon-triangle-down"></i></a>
<a href="https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F&sms=5" name="tj_login" class="lb" onclick="return false;">登录</a>
</div>
<div id="u1">
<a href="https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1" target="_blank" id="virus-2020" class="mnav sp dot">抗击肺炎</a>
<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a><a href="https://www.hao123.com" name="tj_trhao123" class="mnav">hao123</a>
<a href="http://map.baidu.com" name="tj_trmap" class="mnav">地图</a><a href="http://v.baidu.com" name="tj_trvideo" class="mnav">视频</a>
<a href="http://tieba.baidu.com" name="tj_trtieba" class="mnav">贴吧</a><a href="http://xueshu.baidu.com" name="tj_trxueshu" class="mnav">学术</a>
<a href="https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F&sms=5" name="tj_login" class="lb" onclick="return false;">登录</a>
<a href="http://www.baidu.com/gaoji/preferences.html" name="tj_settingicon" class="pf">设置</a>
<a href="http://www.baidu.com/more/" name="tj_briicon" class="bri" style="display: block;">更多产品</a>
</div>
- 发现这里有两个设置,第一个设置有href=“javascript:;”,所以肯定不能用
- 最后一个设置,我们看到一个唯一值href=“搜索设置”,所以肯定用这个
- 为什么不用name,因为name="tj_settingicon"有两个,当然不能用
最后具体实现的代码如下,加上鼠标移动元素判断你到底是不是定位到百度的设置
from selenium import webdriver
from time import sleep
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
driver=webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com")
settings=driver.find_element(By.CSS_SELECTOR, 'a[href="http://www.baidu.com/gaoji/preferences.html"]')
action=ActionChains(driver)
action.move_to_element(settings)
action.perform()
sleep(5)