本篇博客
1 Selenium 基础
8种元素定位方法的分类(按定位方式):
1.1 按id定位(重要)
按id定位语法:
driver.find_element_by_id(value)
访问:哪儿网
2.使用firepath通过id定位”攻略“,”度假“
3.程序完成点击攻略,度假
度假:<a class="q_header_navlink" id="__link_travel__" href="//travel.qunar.com/?from=header" style="background: none repeat scroll 0% 0% transparent;"></a>
攻略:<a class="q_header_navlink" id="__link_package__" href="//dujia.qunar.com/" style="background: none repeat scroll 0% 0% transparent;"></a>
# 练习通过id定位 # 导入webdrvier from selenium import webdriver import time # 创建一个浏览器 driver = webdriver.Firefox() # 访问去哪网 url = 'https://www.qunar.com/' driver.get(url) # 定位到攻略按钮 el = driver.find_element_by_id('__link_travel__') # 点击操作,前提是定位到元素 el.click() # 定位到度假按钮 time.sleep(5) el_1 = driver.find_element_by_id('__link_package__') # 点击操作 el_1.click() time.sleep(5) driver.close()
1.2 按name定位(重要)
按name定位语法:
driver.find_element_by_name(value)
登陆:人人网
1.打开人人网 http://www.renren.com/
2.通过name定位账号框,密码框,登陆按钮
3.输入账号,密码,点击登陆
账号:<input type="text" value="" tabindex="1" id="email" class="input-text" name="email" style="color: rgb(136, 136, 136);">
密码:<input type="password" tabindex="2" class="input-text" error="请输入密码" name="password" id="password">
登陆:<input type="submit" tabindex="5" value="登录" stats="loginPage_login_button" class="input-submit login-btn" id="login">
# 导入webdriver from selenium import webdriver import time # 创建一个浏览器 driver = webdriver.Firefox() # 访问人人网 url = 'http://www.renren.com/' driver.get(url) # 通过name定位到账号输入 el_user = driver.find_element_by_name('email') # 输入账号 el_user.send_keys('17173805860') # 通过name定位到密码输入 el_pwd = driver.find_element_by_name('password') # 输入密码 el_pwd.send_keys('1qaz@WSX3edc') # 通过id定位到登陆按钮 el_sub = driver.find_element_by_id('login') # 点击登陆 el_sub.click() time.sleep(5) driver.close()
1.3 按class定位(重要)
按class定位语法:
driver.find_element_by_class_name(value)
斗鱼翻页
1.打开斗鱼网页 https://www.douyu.com/directory/all
2. 通过class属性对应的值定位到下一页
3.使用for循环点击下一页
下一页:<li title="下一页" tabindex="0" class=" dy-Pagination-next" aria-disabled="false"><span class="dy-Pagination-item-custom">下一页</span></li>
# 通过标签中的class属性对应的值进行元素定位 # 导入webdriver from selenium import webdriver import time # 开浏览器 driver = webdriver.Firefox() # 访问斗鱼 url= 'https://www.douyu.com/directory/all' driver.get(url) # 通过class属性对应的值定位到下一页 for i in range(5): el_next = driver.find_element_by_class_name('dy-Pagination-next') # 点击翻页 el_next.click() time.sleep(1) time.sleep(5) driver.close()
1.4 按标签名进行定位
按标签定位语法:
driver.find_element_by_tag_name(value)
注意:该元素要么唯一,要么是第一个
bing网搜索东西
1.打开bing网 https://cn.bing.com/
2.通过标签定位输入框,定位搜索按钮(id)
3.在输入框输入内容,点击提交
输入框:<input type="search" spellcheck="false" autocomplete="off" value="" title="输入搜索词" name="q" id="sb_form_q" class="b_searchbox" >
搜索按钮:<input type="submit" name="go" tabindex="0" id="sb_form_go" class="b_searchboxSubmit">
# 导包 from selenium import webdriver import time # 开浏览器 driver = webdriver.Firefox() # 访问bing搜索 url = 'https://cn.bing.com/' driver.get(url) # 通过标签名进行定位,该元素要么唯一,要么是第一个 el = driver.find_element_by_tag_name('input') el.send_keys('selenium') # 通过id定位到搜索按钮 el_sub = driver.find_element_by_id('sb_form_go') # 点击搜索 el_sub.click() time.sleep(5) driver.close()
1.5 通过连接文本(可以跳转的问题)进行定位:link_text
按链接文本定位语法:
driver.find_element_by_link_text(value)
浏览58同城
1. 打开58网页 http://bj.58.com/
2. 通过linx_text定位”二手手机”,“生意转让“(鼠标放上去,变小手,说明可以点击)
3.点击二手手机,点击生意转让
直接复制”二手手机”,“生意转让“文字即可。
”品牌公寓“用这个方法(find_element_by_link_text)不行!!!还没解决!!!
# 导包 from selenium import webdriver import time # 开一个浏览器 driver = webdriver.Firefox() # 访问北京58 url = 'http://bj.58.com/' driver.get(url) # 通过连接文本(可以跳转的问题)进行定位 el = driver.find_element_by_link_text('二手手机') # <a href="/shouji/" tongji_tag="pc_home_essc_essj" class="red">二手手机</a> # el = driver.find_element_by_link_text('品牌公寓') # 这个不行 # <a class="red" tongji_tag="pc_home_fc_1_2" href="/pinpaigongyu/">品牌公寓</a> # selenium.common.exceptions.WebDriverException: Message: Element is not clickable at point (48, 394). Other element would receive the click: <img class="fl_cont_sm" src="//img.58cdn.com.cn/ui6/index/home_app_code_1136_4.png"> el1 = driver.find_element_by_link_text('生意转让') # <a href="/shengyizr/" tongji_tag="pc_home_fc_syzr">生意转让</a> # el = driver.find_element_by_link_text('个人房源') # 这个不行 # <a href="/chuzu/0/" tongji_tag="pc_home_fc_1_2" class="null">个人房源</a> # selenium.common.exceptions.WebDriverException: Message: Element is not clickable at point (116, 394). Other element would receive the click: <div class="home_fl_cont"></div> el.click() time.sleep(3) el1.click() time.sleep(5) driver.quit() # driver.close()
1.6 通过部分连接文本进行元素定位:partial_link_text
partial_link_text语法:(和linx_text差不多,前者是部分,后者是完整)
driver.find_element_by_partial_link_text(value)
访问百度,点击hao123链接
1.打开百度 https://www.baidu.com/
2. 通过partial_link_text定位hao123
3.点击hao123
partial_link_text定位:hao,123,hao123,1都是可以的。
# 导包 from selenium import webdriver import time # 开一个浏览器 driver = webdriver.Firefox() # 访问百度 url='https://www.baidu.com/' driver.get(url) # 通过部分连接文本进行元素定位 # el = driver.find_element_by_partial_link_text('hao') el = driver.find_element_by_partial_link_text('hao123') # el = driver.find_element_by_partial_link_text('123') # 点击 el.click() time.sleep(5) driver.close()
1.7 通过xpath定位(重要)
按xpath定位语法:
driver.find_element_by_xpath(value)
有的时候定位的xpath不能用,需要手改。
浏览豆瓣电影
1. 打开豆瓣电影 https://movie.douban.com/
2.通过xpath定位”选电影“
3.点击”选电影“
步奏: 选电影----使用Firebug查看元素----选择Firepath---Xpath
选电影: .//*[@id='db-nav-movie']/div[2]/div/ul/li[2]/a
# 导包 from selenium import webdriver import time # 打开一个浏览器 driver = webdriver.Firefox() # 访问豆瓣电影 url = 'https://movie.douban.com/' driver.get(url) el = driver.find_element_by_xpath(".//*[@id='db-nav-movie']/div[2]/div/ul/li[2]/a") el.click() time.sleep(5) driver.close()
1.8 通过css定位
按css定位语法:
driver.find_element_by_css_selector(value)
访问天猫商城
1.打开天猫商城 https://www.tmall.com/
2.通过css定位天猫国际
3.点击天猫国际
步奏:天猫国际--查看元素--复制唯一选择器
天猫国际:.inner-con2 > a:nth-child(2) > img:nth-child(1)
# 导包 from selenium import webdriver import time # 开浏览器 driver = webdriver.Firefox() # 访问天猫 url = 'https://www.tmall.com/' driver.get(url) # 定位天猫国际 # 1.通过firebug获取css选择器 # el = driver.find_element_by_css_selector('html.ks-gecko35.ks-gecko.ks-firefox35.ks-firefox body.w1230 div#mallPage.mui-global-biz-mallfp div#content div.main-nav div.inner-con0 div.inner-con1 div.inner-con2.clearfix a img') # 天猫国际-使用Firebug查看元素-复制css路径 # 2.firepath获取css选择器 # 定位不精准,定位到天猫国际,跳转到天猫超市 # el = driver.find_element_by_css_selector('.inner-con2.clearfix>a>img') # 天猫国际-Inspect in Firepath -css -天猫国际-Inspect in Firepath(刷新) # 3.自带 el = driver.find_element_by_css_selector('.inner-con2 > a:nth-child(2) > img:nth-child(1)') # 天猫-查看元素-复制唯一选择器 el.click() time.sleep(5) driver.quit()
上面用3中方法查看元素
1.通过firebug获取css选择器 工作中基本不用这个
步奏:天猫国际-使用Firebug查看元素-复制css路径
结果:没有定位到
2.firepath获取css选择器
步奏:天猫国际-Inspect in Firepath -css -天猫国际-Inspect in Firepath(刷新)
结果: 定位不精准,定位到天猫国际,跳转到天猫超市
3.查看元素(自带) 推荐
天猫-查看元素-复制唯一选择器
结果:正确
2 Selenium 高级