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

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

python实战004:Selenium获取源码中的DOM元素_第1张图片

 用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"属性,我们先确认下这两个属性是否存在多个,如果都是唯一的,随便选个即可。

python实战004:Selenium获取源码中的DOM元素_第2张图片

那么我们该如何来选择这个元素呢,这里我们可以使用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() 

python实战004:Selenium获取源码中的DOM元素_第3张图片

接着我们需要继续点击“用户名登录”标签,让窗口跳转到用户名登录页面,同样我们要先找到该标签的DOM元素, 按F12打开“开发者工具”窗口,用元素选择器点中“用户名登录”标签即可定位到该标签的源码位置,在源码中我们可以看到:

python实战004:Selenium获取源码中的DOM元素_第4张图片

 这里我们看到,代码中定义了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()

python实战004:Selenium获取源码中的DOM元素_第5张图片

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

python实战004:Selenium获取源码中的DOM元素_第6张图片

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

python实战004:Selenium获取源码中的DOM元素_第7张图片

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

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

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

你可能感兴趣的:(编程语言Python,自动化测试Selenium)