selenium
简介使用1.Python环境中安装selenium2.把驱动程序放在pycharm开发目录中入门
**元素定位**取标签文本窗口操作切换窗口关闭窗口关闭浏览器切换iframe下拉列表框和不显示窗口
节点交互等待执行js删除广告等遮挡
动作链
简介
selenium:浏览器自动化的工具 链接: 文档
使用
1.Python环境中安装selenium
pip install selenium
2.把驱动程序放在pycharm开发目录中
下载与浏览器对应的驱动程序:
http://chromedriver.storage.googleapis.com/index.html 驱动和浏览器版本的对应表:
http://blog.csdn.net/huilan_same/article/details/51896672阿里源:https://registry.npmmirror.com/binary.html?path=chromedriver/
入门
import time
from selenium import webdriver
# 取得谷歌浏览器驱动
driver = webdriver.Chrome()
# 打开网页
driver.get('https://www.jd.com/')
# 页面最大化
driver.maximize_window()
# 得到页面大小
print(driver.get_window_size())
# 得到网址
print(driver.current_url)
# 得到所有窗口句柄
print(driver.window_handles)
# 睡5秒,等待
time.sleep(5)
# close driver,resource recovery
driver.quit()
# driver.close() # 关闭页面
元素定位
常用的有以下几种:
driver.find_element(By.XPATH,'XPATH')
driver.find_element(By.CLASS_NAME,'CLASS_NAME')
driver.find_element(By.CSS_SELECTOR,'CSS_SELECTOR')
driver.find_element(By.ID,'ID')
driver.find_element(By.LINK_TEXT,'LINK_TEXT')
driver.find_element(By.PARTIAL_LINK_TEXT,'PARTIAL_LINK_TEXT')
driver.find_element(By.TAG_NAME,'TAG_NAME')
id定位
driver.get('https://www.jd.com/')
eli = driver.find_element(By.ID,'key')
超链接,根据文本进行定位,精确定位,文本不能缺错
eli = driver.find_element(By.LINK_TEXT,'抢大牌好价')
eli.click()
超链接,部分文本匹配,click()摸拟点击行为
eli = driver.find_element(By.PARTIAL_LINK_TEXT,'牌好价').click()
Xpath定位
字符说明input选择所有input标签,同理,可以选选div等其他标签*选择所有元素/从当前开始选择//从当前及以下的任意节点选择.当前节点…父节点@根据属性进行选择[n]返回结果的第n项
在京东搜索栏里找“奶粉”
eli = driver.find_element(By.XPATH,'//*[@id="key"]').send_keys('奶粉')
eli = driver.find_element(By.XPATH,'//*[@id="search"]/div/div[2]/button').click()
取标签文本
item.find_element_by_xpath('./div[1]/div[2]/div[1]/a').text
窗口操作
切换窗口
web.switch_to.window(web.window_handles[-1]) # 跳转到最后一个窗口
关闭窗口
web.close()
关闭浏览器
web.quit()
切换iframe
# 旧版selenium找元素方法,先找到哪个iframe
iframe = web.find_element_by_xpath('//iframe[@id="mplay"]')
# 切换到iframe
web.switch_to.frame(iframe)
val = web.find_element_by_xpath('//input[@class="dplayer-comment-input"]').get_attribute("placeholder")
print(val)
# 跳出当前iframe
web.switch_to.parent_frame()
# 取iframe外的元素文本
xxx = web.find_element_by_xpath('/html/body/div[2]/div[3]/div[2]/div/div[2]/h2').text
下拉列表框和不显示窗口
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from selenium.webdriver.chrome.options import Options
import time
# 不开启浏览器窗口
option_browser = Options()
option_browser.add_argument("--headless")
option_browser.add_argument('--disable-gpu')
web = Chrome(options=option_browser)
web.get('https://www.endata.com.cn/BoxOffice/BO/Year/index.html')
# 切换下拉列表窗
pull_down_list = Select(web.find_element(by=By.XPATH, value='//*[@id="OptionDate"]'))
for i in range(len(pull_down_list.options)):
# 按照索引位置切换
pull_down_list.select_by_index(i)
time.sleep(1)
# selenium老版写法
table = web.find_element_by_xpath('//*[@id="TableList"]/table')
print("*"*30)
print(table.text)
节点交互
输入文字时用send_keys()方法清空文字时用clear()方法点击按钮时用click()方法。
等待
因网速等原因,网页未能全部加载而找不到相应元素,需要等待加载完毕,再找查找元素
强制等待
time.sleep(10)
隐式等待
driver.implicitly_wait(15)
执行js
模拟运行JavaScript,此时使用execute_script()方法即可实现。
driver.execute_script('document.documentElement.scrollTo(0,2000)')
删除广告等遮挡
driver.execute_script("""
var a = document.getElementsByClassName("un-login-banner")[1];
a.parentNode.removeChild(a);
""")
动作链
链接: 演示网址
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
# 取得谷歌浏览器驱动
driver = webdriver.Chrome()
url = ''
# 打开网页
driver.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
driver.implicitly_wait(15)
# eli = driver.find_element(By.ID,'key')
# eli = driver.find_element(By.PARTIAL_LINK_TEXT,'牌好价').click()
# eli = driver.find_element(By.LINK_TEXT,'牌好价')
# eli = driver.find_element(By.XPATH,'//*[@id="key"]').send_keys('奶粉')
# eli = driver.find_element(By.XPATH,'//*[@id="search"]/div/div[2]/button').click()
# 如果定位的标签在iframe标签中,需要以下语句,frame的参数可以是iframe标签的id属性
driver.switch_to.frame('iframeResult')
drag_block = driver.find_element(By.XPATH, '//*[@id="draggable"]')
# 创建动作链对象,绑定浏览器
my_action = ActionChains(driver)
# 点击并长按指定标签
my_action.click_and_hold(drag_block)
# 移动标签,perform()表示立即执行
for i in range(6):
my_action.move_by_offset(25,25).perform()
time.sleep(0.5)
# 睡5秒,等待
time.sleep(1)
# 释放动作链对象
my_action.release()
# close driver,resource recovery
# driver.quit()
# driver.close() # 关闭页面
相关链接
发表评论