python实战004:Selenium获取源码中的DOM元素

      前面我们已经通过Selenium可以模拟登录网站并获取到网页源码,接着我们就要想办法实现模拟登录,在实现模拟登录之前我们需要先获取到相应的DOM元素,才能给其赋值提交账户信息,这里我们要现获取到“登录”标签并实现点击,弹出百度登录窗口。

 用selenium查找元素是相当方便的事情的,selenium定义了很多查找DOM元素的方法,通常用的比较多的是通过id选择器和CSS选择器,当然还有更多的方法:

find_element_by_id                //通过id查找单个元素
find_element_by_name              //通过name查找单个元素
find_element_by_xpath             //通过xpath查找单个元素
find_element_by_link_text         //通过链接查找单个元素
find_element_by_partial_link_text //通过部分链接查找单个元素
find_element_by_tag_name          //通过标签名称查找单个元素
find_element_by_class_name        //通过类名查找单个元素
find_element_by_css_selector      //通过css选择武器查找单个元素
find_elements_by_name             //通过name查找多个元素
find_elements_by_xpath            //通过xpath查找多个元素
find_elements_by_link_text        //通过链接查找多个元素
find_elements_by_partial_link_text//通过部分链接查找多个元素
find_elements_by_tag_name         //通过标签名称查找多个元素
find_elements_by_class_name       //通过类名查找多个元素
find_elements_by_css_selector     //通过css选择武器查找多个元素

      在获取DOM元素之前我们需要先查看下网页源码,看看这个标签是用什么方法定义的,按F12打开“开发者工具”窗口,用元素选择器点中“登录”标签即可定位到该标签的源码位置,在源码中我们可以看到name="tj_login" class="lb"属性,我们先确认下这两个属性是否存在多个,如果都是唯一的,随便选个即可。

那么我们该如何来选择这个元素呢,这里我们可以使用find_element_by_css_selector方法来获取DOM元素,这里我们用name="tj_login" class="lb"两个属性分别获取下该元素,这时我们看到的就是弹出二维码登录的页面。

from selenium import webdriver
from time import sleep
browser = webdriver.Chrome()
browser.get('http://www.baidu.com')
sleep(1)  #等待网页加载
element=browser.find_element_by_css_selector('#u1 .lb') #通过class来获取DOM元素
# element=browser.find_element_by_css_selector("#u1 > a[name='tj_login']") #通过标签来获取取DOM元素
element.click() 

接着我们需要继续点击“用户名登录”标签,让窗口跳转到用户名登录页面,同样我们要先找到该标签的DOM元素, 按F12打开“开发者工具”窗口,用元素选择器点中“用户名登录”标签即可定位到该标签的源码位置,在源码中我们可以看到:<p class="tang-pass-footerBarULogin pass-link" title="用户名登录" data-type="normal" id="TANGRAM__PSP_10__footerULoginBtn">用户名登录</p>

 这里我们看到,代码中定义了ID属性id="TANGRAM__PSP_10__footerULoginBtn",这样我们就可以直接使用find_element_by_id来定位到该标签:

from selenium import webdriver
from time import sleep
browser = webdriver.Chrome()
browser.get('http://www.baidu.com')
sleep(2)  #等待网页加载
browser.find_element_by_css_selector('#u1 .lb').click()  #通过class来获取DOM元素
#browser.find_element_by_css_selector("#u1 > a[name='tj_login']").click() #通过标签来获取取DOM元素
sleep(2)  #等待网页加载
browser.find_element_by_id('TANGRAM__PSP_10__footerULoginBtn').click()

这里遇到个问题,当我使用find_element_by_css_selector方法获取标签时遇到点问题,在查找DOM元素时已经确认了该属性是唯一的,按理说直接指定该元素应该就可以定位到了,可以当我使用 find_element_by_css_selector(‘lb’)时报错了:没有这样的元素:找不到元素:“method”:“css selector”,“selector”:“lb”(翻译:没有这样的元素:找不到元素:“method”:“css selector”,“selector”:“lb”)

    我用获取元素信息的方法is_displayed() 查看'.lb'是否存在,打印element判断元素是否是存在的,返回true,说明是存在的,false表示不存在,这里返回false,说明没找到'.lb'。

总结: 通过find_element_by_css_selector查找DOM元素要从父级开始往下查找,才能找到对应的属性标签。

百度经验:python实战004:Selenium获取源码中的DOM元素  

欢迎关注本人的公众号:编程手札,文章也会在公众号更新

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ProgramNotes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值