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() # 关闭页面

相关链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。