Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE,Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。
首先下载驱动文件:https://chromedriver.storage.googleapis.com/index.html?path=2.39/
放入google目录下
测试代码,测试是否能读取到驱动文件。
from selenium import webdriverpath = "C:/Users/LyShark/AppData/Local/Google/Chrome/Application/chromedriver.exe" driver = webdriver.Chrome(executable_path=path) url = "https://www.baidu.com" driver.get(url) print (driver.page_source)
简单的实现浏览器测试
from selenium import webdriverWebPath = "C:/Users/LyShark/AppData/Local/Google/Chrome/Application/chromedriver.exe" driver = webdriver.Chrome(executable_path=WebPath) driver.set_window_size(1000 ,500 ) url = "https://www.baidu.com" driver.get(url) print (driver.find_element_by_id("kw" ))
Selenium 自动化测试库的使用:
<!DOCTYPE html > <html lang ="en" > <head > <meta charset ="gbk" > <title > Selenium Test</title > </head > <body > <div class ="acount" id ="aid" > <a class ="mnav" href ="https://news.baidu.com" name ="trnews" > 新闻</a > <a class ="mnav" href ="https://lyshark.cnblogs.com" name ="myblog" > 我的博客</a > <a class ="mnav" href ="https://github.com/lyshark" name ="mygit" > GitHub</a > </div > <form id ="forms" class ="fms" name ="submit_form" action ="index.html" > <span class ="soutu-btn" > </span > <p > 用户: <input id ="user" class ="s_ipt" name ="wd" value ="" maxlength ="255" autocomplete ="off" > </p > <p > 密码: <input id ="pass" class ="s_ipt" name ="wd" value ="" maxlength ="255" autocomplete ="off" > </p > <input type ="submit" value ="提交" /> </form > <p name ="p1" > hello lyshark p1</p > <p name ="p2" > hello lyshark p2</p > </body > </html >
通过简单的浏览文件并实现简单的定位.
from selenium import webdriverWebPath = "C:/Users/LyShark/AppData/Local/Google/Chrome/Application/chromedriver.exe" driver = webdriver.Chrome(executable_path=WebPath) driver.set_window_size(1024 ,768 ) driver.get("http://lyshark.com" ) print ("当前URL: {}" .format (driver.current_url))print ("当前标题: {}" .format (driver.title))print ("网页代码: {}" .format (driver.page_source))print (driver.find_element_by_id("user" )) print (driver.find_element_by_name("p1" ).text) print (driver.find_element_by_class_name("s_ipt" )) print (driver.find_element_by_xpath("//form[@class='fms']//input[@id='user']" ))print (driver.find_element_by_xpath("//p[@name='p1']" ))print (driver.find_element_by_xpath("//html/body/form/p/input" ))print (driver.find_elements_by_css_selector(".fms #user" ))print (driver.find_element_by_link_text("新闻" ))print (driver.find_element_by_partial_link_text("我" ))
通过xpath定位标签并自动输入内容,发送登录请求到后端,写法如下.
from selenium import webdriverWebPath = "C:/Users/LyShark/AppData/Local/Google/Chrome/Application/chromedriver.exe" driver = webdriver.Chrome(executable_path=WebPath) driver.set_window_size(1024 ,768 ) driver.get("http://lyshark.com" ) driver.find_element_by_xpath("//form[@class='fms']/p//input[@id='user']" ).send_keys("lyshark" ) driver.find_element_by_xpath("//form[@class='fms']/p//input[@id='pass']" ).clear() driver.find_element_by_xpath("//form[@class='fms']/p//input[@id='pass']" ).send_keys("123123" ) driver.find_element_by_xpath("//form[@class='fms']/input[@type='submit']" ).click()
通过键盘鼠标类库记录并可回放
from selenium import webdriverfrom selenium.webdriver import ActionChainsfrom selenium.webdriver.common.keys import KeysWebPath = "C:/Users/LyShark/AppData/Local/Google/Chrome/Application/chromedriver.exe" driver = webdriver.Chrome(executable_path=WebPath) driver.set_window_size(1024 ,768 ) driver.get("https://www.baidu.com" ) above = driver.find_element_by_link_text("更多产品" ) ActionChains(driver).move_to_element(above).perform() driver.find_element_by_id("kw" ).send_keys("seleniumm" ) driver.find_element_by_id("kw" ).send_keys(Keys.BACK_SPACE) driver.find_element_by_id("kw" ).send_keys(Keys.SPACE) driver.find_element_by_id("kw" ).send_keys("从入门到入土" ) driver.find_element_by_id("kw" ).send_keys(Keys.CONTROL, 'a' ) driver.find_element_by_id("kw" ).send_keys(Keys.CONTROL, 'x' ) driver.find_element_by_id("kw" ).send_keys(Keys.CONTROL, 'v' ) driver.find_element_by_id("su" ).send_keys(Keys.ENTER)
简单的点击事件
from selenium import webdriverimport timeWebPath = "C:/Users/LyShark/AppData/Local/Google/Chrome/Application/chromedriver.exe" driver = webdriver.Chrome(executable_path=WebPath) driver.set_window_size(1024 ,768 ) driver.get("https://www.baidu.com" ) driver.find_element_by_id("kw" ).send_keys("lyshark" ) driver.find_element_by_id("su" ).click() time.sleep(1 ) driver.find_element_by_xpath("//div[@id='1']//a[contains(text(),'-')]" ).click() time.sleep(1 ) handle = driver.current_window_handle handle_all = driver.window_handles print (handle_all)driver.switch_to.window(handle_all[0 ]) time.sleep(1 ) driver.find_element_by_id("kw" ).clear()
百度自动收集
from selenium import webdriverfrom bs4 import BeautifulSoupfrom queue import Queueimport requests,os,re,lxmlhead = {"User-Agent" :"Mozilla/5.0 (iPhone; U; CPU like Mac OS X) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3" } WebPath = "C:/Users/LyShark/AppData/Local/Google/Chrome/Application/chromedriver.exe" driver = webdriver.Chrome(executable_path=WebPath) queue = Queue() for item in range (0 ,1000 ,10 ): queue.put('https://www.baidu.com/s?wd={}&pn={}' .format ("lyshark" ,str (item))) for item in queue.queue: driver.get(item) ret = str (driver.page_source) try : soup = BeautifulSoup(ret,'lxml' ) urls = soup.find_all(name='a' ,attrs={'data-click' :re.compile (('.' )),'class' :None }) for item in urls: get_url = requests.get(url=item['href' ],headers=head,timeout=5 ) if get_url.status_code == 200 : print (get_url.url) except Exception: pass
页面等待
from selenium import webdriverdriver=webdriver.Chrome() driver.get('https://www.taobao.com/' ) wait=WebDriverWait(driver,3 ) input =wait.until(EC.presence_of_element_located((By.ID,'q' ))) button=wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'.btn-search' ))) print (input ,button)driver = webdriver.Firefox() driver.implicitly_wait(10 ) driver.get("http://somedomain/url_that_delays_loading" ) myDynamicElement = driver.find_element_by_id("myDynamicElement" )
键盘操作
element=driver.find_element_by_id('search' ) element.send_keys('selenium' ) element.send_keys(Keys.ENTER) element_a=driver.find_element_by_link_text('selenium' ) ActionChains(driver).move_to_element(element_a).click(element_a).perform() element_down=driver.find_element_by_link_text('Download files' ) ActionChains(driver).move_to_element(element_down).click(element_down).perform() element_selenium=driver.find_element_by_link_text('selenium-3.13.0.tar.gz' ) data=element_selenium.get_attribute('href' ) with open ('selenium-3.13.0.tar.gz' ,'wb' ) as f: source=requests.get(data).content f.write(source) f.close() driver.quit() menu = driver.find_element_by_css_selector(".nav" ) hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1" ) actions = ActionChains(driver) actions.move_to_element(menu) actions.click(hidden_submenu) actions.perform()