一、什么是Selenium
selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。
selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。
支持浏览器:
![]()
PhantomJS是一个而基于WebKit的服务端JavaScript API,支持Web而不需要浏览器支持,其快速、原生支持各种Web标准:Dom处理,CSS选择器,JSON等等。PhantomJS可以用用于页面自动化、网络监测、网页截屏,以及无界面测试
二、selenium基本使用
声明浏览器对象
from selenium import webdriver browser = webdriver.Chrome() browser.get('') #报错: 'chromedriver' executable needs to be in Path #解决方法: https://blog.csdn.net/qq_26200629/article/details/86141131 #或者将exe放到chrom安装目录的Application下,并手动添加环境变量 (然而 好像不太行) #亲测可行的: 直接将chromedriver复制到python.exe 同目录下
访问页面
from selenium import webdriver browser = webdriver.Chrome() #声明浏览器对象 browser.get("http://www.taobao.com") #打开浏览器访问百度 print(browser.page_source) #返回页面资源 browser.close()
查找单个元素
from selenium import webdriver browser = webdriver.Chrome() browser.get("http://www.taobao.com") input_first = browser.find_element_by_id("q") #通过id input_second = browser.find_element_by_css_selector("#q") #css选择器 input_third = browser.find_element_by_xpath('//*[@id="q"]') #path选择器 print(input_first) print(input_second) print(input_third) browser.close() #常用查找方法 find_element_by_name (“name对应的值”) find_element_by_id (“id对应的值”) find_element_by_xpath (“xpath的值,可选中元素后,鼠标右键复制xpath”) find_element_by_link_text (“链接的文本内容”) #(link定位的补充,可取链接部分文本内容进行定位) find_element_by_partial_link_text (“链接的部分文本内容”) find_element_by_tag_name (“tag对应的值”) find_element_by_class_name (“class对应的值”) find_element_by_css_selector (“CSS路径,同样可选中元素后,鼠标右键复制CSS路径”) # from selenium.webdriver.common.by import By input_first = browser.find_element(By.ID,"q")
多个元素查找
from selenium import webdriver browser = webdriver.Chrome() browser.get("http://www.taobao.com") lis = browser.find_elements_by_css_selector('.service-bd li') print(lis) browser.close() # lis = browser.find_elements(By.CSS_SELECTOR,'.service-bd li') #常用查找方法 find_elements_by_name find_elements_by_id find_elements_by_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
元素交互操作
from selenium import webdriver import time browser = webdriver.Chrome() browser.get("http://www.taobao.com") #<input id="q" name="q" aria-label="请输入搜索文字" .......> input_str = browser.find_element_by_id('q') input_str.send_keys("ipad") #输入ipad time.sleep(1) input_str.clear() #删除 input_str.send_keys("MacBook pro") #输入macBook pro #<button class="btn-search tb-bg" type="submit" data-spm-click="gostr=/tbindex;locaid=d13"> #("btn-search tb-bg") 报错 无法找到element #("btn-search.tb-bg") 可以找到element button = browser.find_element_by_class_name('btn-search') #寻找 button.click() #点击
交互动作(将动作附加到动作链中串行执行)
from selenium import webdriver from selenium.webdriver import ActionChains browser = webdriver.Chrome() url = "http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable" browser.get(url) browser.switch_to.frame('iframeResult') source = browser.find_element_by_css_selector('#draggable') target = browser.find_element_by_css_selector('#droppable') actions = ActionChains(browser) actions.drag_and_drop(source, target) actions.perform()
执行JavaScript
from selenium import webdriver browser = webdriver.Chrome() browser.get("http://www.zhihu.com/explore") browser.execute_script('window.scrollTo(0, document.body.scrollHeight)') browser.execute_script('alert("To Bottom")')
获取元素属性
from selenium import webdriver browser = webdriver.Chrome() url = 'https://www.zhihu.com/explore' browser.get(url) logo = browser.find_element_by_id('zh-top-link-logo') print(logo) print(logo.get_attribute('class'))
获取文本值
from selenium import webdriver browser = webdriver.Chrome() url = 'https://www.zhihu.com/explore' browser.get(url) input = browser.find_element_by_class_name('zu-top-add-question') print(input.text)
获取ID,位置,标签名
from selenium import webdriver browser = webdriver.Chrome() url = 'https://www.zhihu.com/explore' browser.get(url) input = browser.find_element_by_class_name('zu-top-add-question') print(input.id) print(input.location) print(input.tag_name) print(input.size)
浏览器的前进和后退
import time from selenium import webdriver browser = webdriver.Chrome() browser.get('https://www.baidu.com/') #访问baidu browser.get('https://www.taobao.com/') #访问taobao browser.get('https://www.sina.com/') #访问sina browser.back() #由sina返回taobao time.sleep(1) browser.forward() #由taobao页换到sina browser.close()
cookie操作
from selenium import webdriver browser = webdriver.Chrome() browser.get('https://www.zhihu.com/explore') print(browser.get_cookies()) browser.add_cookie({'name': 'name', 'domain': 'www.zhihu.com', 'value': 'zhaofan'}) print(browser.get_cookies()) browser.delete_all_cookies() print(browser.get_cookies()