简介 -> selenium

是一种浏览器自动化的工具,所谓的自动化是指,我们可以通过代码的形式制定一系列的行为动作,然后执行代码,这些动作就会同步触发在浏览器中。

环境安装

 ## 开发环境安装selenium:pip install selenium

下载浏览器驱动程序:

  ## 链接:http://chromedriver.storage.googleapis/index.html

如下图

查浏览器版本号

查看驱动和浏览器版本的映射关系

    ## 转发链接:http://blog.csdn/huilan_same/article/details/51896672

下载后放置(如下)

效果展示

from selenium import webdriver
from time import sleep

# 后面是你的浏览器驱动位置,记得前面加r'','r'是防止字符转义的
driver = webdriver.Chrome(r'./chromedriver')
# 用get打开百度页面
driver.get("http://www.baidu")
# 查找页面的“设置”选项,并进行点击
driver.find_element_by_xpath('//*[@id="s-usersetting-top"]').click()
sleep(2)
# # 打开设置后找到“搜索设置”选项,设置为每页显示50条
driver.find_elements_by_link_text('搜索设置')[0].click()
sleep(2)

# 选中每页显示50条
m = driver.find_element_by_xpath('//*[@id="nr_3"]').click()
sleep(2)

# 点击保存设置
driver.find_element_by_xpath('//*[@id="se-setting-7"]/a[2]').click()
sleep(2)

# 处理弹出的警告页面   确定accept() 和 取消dismiss()
driver.switch_to_alert().accept()
sleep(2)
# 找到百度的输入框,并输入 美女
driver.find_element_by_id('kw').send_keys('美女')
sleep(2)
# 点击搜索按钮
driver.find_element_by_id('su').click()
sleep(2)
# 在打开的页面中找到“Selenium - 开源中国社区”,并打开这个页面
driver.find_element_by_xpath('//*[@id="1"]/div/h3/a').click()
sleep(3)

# 关闭浏览器
driver.quit()

浏览器创建

Selenium支持非常多的浏览器,如Chrome、Firefox、Edge等.另外,也支持无界面浏览器

      ## 例如:
                  from selenium import webdriver
				 browser = webdriver.Chrome()
				  browser = webdriver.Firefox()
				  browser = webdriver.Edge()
				  browser = webdriver.PhantomJS()
				  browser = webdriver.Safar

元素定位

		       find_element_by_id()
			  find_element_by_name()
			  find_element_by_class_name()
			  find_element_by_tag_name()
			  find_element_by_link_text()
			  find_element_by_xpath()
			  find_element_by_css_selector()

节点交互

Selenium可以驱动浏览器来执行一些操作,也就是说可以让浏览器模拟执行一些动作。比较常见的用法有:输入文字时用`send_keys()`方法,清空文字时用`clear()`方法,点击按钮时用`click()`方法。

执行js

对于某些操作,Selenium API并没有提供。比如,下拉进度条,它可以直接模拟运行JavaScript,此时使用execute_script()方法即可实现。

案例

from selenium import webdriver
from time import sleep
#1.创建一个浏览器对象,executable_path指定当前浏览器的驱动程序
#注意:我当前是mac系统,驱动程序也是mac版本的,如果是window系统注意更换驱动
bro = webdriver.Chrome(executable_path='./chromedriver')
#2.浏览器的请求发送
bro.get('https://www.jd/')
#3.标签定位:调用find系列的函数进行标签定位
search_box = bro.find_element_by_xpath('//*[@id="key"]')
#4.节点交互
search_box.send_keys('mac pro m1')#向指定标签中录入内容
sleep(2)
btn = bro.find_element_by_xpath('//*[@id="search"]/div/div[2]/button')
btn.click() #点击按钮
sleep(2)
#js注入
bro.execute_script('document.documentElement.scrollTo(0,2000)')
sleep(5)
#关闭浏览器
bro.quit()

获取企业信息 ->前五页

 from selenium import webdriver
      import time
      from lxml import etree
      
      bro = webdriver.Chrome(executable_path='./chromedriver')
      url = 'http://scxk.nmpa.gov:81/xk/'
      bro.get(url=url)
      time.sleep(1)
      #获取页面源码数据(page_source)
      page_text = bro.page_source
      #将前5页的页面源码数据存储到该列表中
      all_page_text_list = [page_text]
      for i in range(4):
          #点击下一页
          next_page_btn = bro.find_element_by_xpath('//*[@id="pageIto_next"]')
          next_page_btn.click()
          time.sleep(1)
          all_page_text_list.append(bro.page_source)
      
      for page_text in all_page_text_list:
          #解析数据
          tree = etree.HTML(page_text)
          li_list = tree.xpath('//*[@id="gzlist"]/li')
          for li in li_list:
              title = li.xpath('./dl/@title')[0]
              print(title)
      
      time.sleep(2)
      bro.quit()

模拟浏览器的前进后退

from selenium import webdriver
import time

browser = webdriver.Chrome(r’./chromedriver’)
browser.get(‘https://www.baidu’)
browser.get(‘https://www.taobao’)

browser.back()
time.sleep(2)
browser.forward()
time.sleep(2)

browser.close()

获取动态加载数据

动作链

 在上面的实例中,一些交互动作都是针对某个节点执行的。比如,对于输入框,我们就调用它的输入文字和清空文字方法;对于按钮,就调用它的点击方法。其实,还有另外一些操作,它们没有特定的执行对象,比如鼠标拖曳、键盘按键等,这些动作用另一种方式来执行,那就是动作链。
from selenium.webdriver import ActionChains
from selenium import webdriver
from time import sleep
bro = webdriver.Chrome(executable_path='./chromedriver')
bro.get('https://www.runoob/try/try.php?filename=jqueryui-api-droppable')
sleep(1)
#注意:如果定位的标签是存在于iframe表示的子页面中,则常规的标签定位报错
#处理:使用如下指定操作
bro.switch_to.frame('iframeResult')
div_tag = bro.find_element_by_id('draggable')

#实例化一个动作链对象且将该对象绑定到指定的浏览器中
action = ActionChains(bro)
action.click_and_hold(div_tag) #对指定标签实现点击且长按操作
for i in range(5):
    action.move_by_offset(10,10).perform() #perform让动作链立即执行
    sleep(0.5)
sleep(3)
bro.quit()

更多推荐

【selenium】python&&安装及初步认识