selenium常见操作

导入所需要的模块

from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

构建带有参数的谷歌浏览器

opt = Options()
opt.add_argument('--no-sandbox')          #解决DevToolsActivePort文件不存在的报错
opt._arguments = ['disable-infobars']     #去掉谷歌浏览器正在被自动测试控制字样
opt.add_argument('window-size=1920x3000') #指定浏览器分辨率
opt.add_argument('--disable-gpu')         #谷歌文档提到需要加上这个属性来规避bug
opt.add_argument('--hide-scrollbars')     #隐藏滚动条, 应对一些特殊页面
# 不加载图片, 提升速度
opt.add_argument('blink-settings=imagesEnabled=false') 
# 加载用户信息的谷歌浏览器
opt.add_argument("--user-data-dir="+r"C:UsersAdministratorAppDataLocalGoogleChromeUser Data") 
opt.add_argument('--headless')            #浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
# 添加UA
opt.add_argument('user-agent="MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"')
opt.add_argument('--no-sandbox')          #以最高权限运行
opt.add_argument("--disable-javascript")  #禁用JavaScript
# 设置开发者模式启动,该模式下webdriver属性为正常值
opt.add_experimental_option('excludeSwitches', ['enable-automation']) 
# 禁用浏览器弹窗
prefs = { 'profile.default_content_setting_values' :  { 'notifications' : 2 }}  
opt.add_experimental_option('prefs',prefs)
opt.add_argument('--disable-plugins')     #禁止插件
# 禁用弹出拦截
opt.add_argument('--disable-popup-blocking')     
# 调用带参数的谷歌浏览器  
driver = webdriver.Chrome(chrome_options=opt)  

设置窗口大小

driver.maximize_window()           #窗口最大化
driver.set_window_size(480, 800)   #设置窗口大小

调节最大等待时间

wait = WebDriverWait(driver, 15)    

加载指定网址

driver.get(url)

位置定位及交互

#查找元素方法
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
#实例
wait.until(EC.presence_of_element_located((By.XPATH,'')))  #以Xpath定位第一个满足元素,等待最大响应时间 
driver.find_element_by_xpath('').click()                   #以Xpath定位第一个满足元素,并进行点击操作
driver.find_elements_by_id("")							   #以属性ID定位所有满足的元素
driver.find_element_by_id('jgwab').text               	   #获取控件id为’jgwab’所显示的内容
driver.find_element_by_id('su').get_attribute('type')      #获取控件id为’su’的属性,例如button,radio等
driver.find_element_by_id('kw').size                       #获得控件的尺寸
# 以属性ID定位第一个满足元素,等待最大响应时间
input = wait.until(EC.presence_of_element_located((By.ID, "")))
input.send_keys('')      #输入文本信息
input.clear()			 #清空

如果以上方法都定位不到控件,说明很可能在iframe里,下面为切换到iframe的方法

driver.switch_to.frame(1)               #转入网页内iframe(内嵌的网页元素)
driver.switch_to.parent_frame()         #切回上一层frame
driver.switch_to_default_content()      #返回到主页面

切换网页窗口

windows=driver.window_handles        #获得当前浏览器所有窗口
driver.switch_to.window(windows[0])  #切换到最左侧窗口
driver.switch_to.window(windows[-1]) #切换到最新打开窗口(注:也就是最右侧窗口)

滚动条操作

# 将滚动条从 0px的地方移动到5000px的地方
driver.execute_script("window.scrollBy(0,5000)")  
# 滚动到页面底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
# 滚动到页面顶部
driver.execute_script("window.scrollTo(document.body.scrollHeight,0)")
# 将滚动条向上移动500px单位
driver.execute_script("window.scrollTo(document.body.scrollHeight,500)")

浏览器操作

driver.back()         #返回界面
driver.forward()	  #前进界面
driver.refresh()      #刷新界面

当前网页信息

driver.current_url          #获取当前网址
driver.page_source          #获取源代码
driver.title                #获取当前页面标题内容
driver.delete_all_cookies() # 删除所有cookie
#获取cookies
driver.get_cookies()  
cookie_list = []
for dict in cookies:
    cookie = dict['name'] + '=' + dict['value']
    cookie_list.append(cookie)
cookie = ';'.join(cookie_list)

窗口截图

driver.get_screenshot_as_file("scr.jpg")

提交表单

# submit()方法用于提交表单,这里特别用于没提交按钮的情况
# 例如搜索框输入关键字之后的“回车”操作,那么就可以通过submit()来提交搜索框的内容。
driver.find_element_by_id('query').submit()

实现某个节点的拖曳操作,将某个节点从一处拖曳到另外一处

from selenium.webdriver import ActionChains
source = driver.find_element_by_xpath('')
target = driver.find_element_by_xpath('')
actions = ActionChains(driver)
actions.drag_and_drop(source, target)
actions. perform()

取消选择已经选择的元素

select = Select(driver.find_element_by_id('id'))
select.deselect_all()

对话框操作

alert = driver.switch_to_alert()    #访问对话框
alert.accept()                      #点击alert对话框的确定按钮
alert.dismiss()                     #点击alert对话框的取消按钮

层级定位

driver.find_element_by_id('ShippingMethod').find_element_by_xpath("//option[@value='7.45']").click()

元素是否可见

#返回元素的结果是否可见,返回结果为True 或False
result=driver.find_element_by_id("kw").is_displayed()

模拟鼠标操作

from selenium.webdriver.common.action_chains import ActionChains
# 鼠标右击,perform() 是执行方法的语句
ActionChains(driver).context_click(driver.find_element_by_xpath("//*[text()='最新热剧']")).perform()
# 鼠标双击
ActionChains(driver).double_click(driver.find_element_by_id('kw')).perform()
# 停留在文本搜索框上
ActionChains(driver).move_to_element(driver.find_element_by_id('kw')).perform()
# 点击并且停留在搜索按钮上
ActionChains(driver).click_and_hold(driver.find_element_by_id('su')).perform()

模拟键盘操作

from selenium.webdriver.common.keys import Keys
driver.find_element_by_id('kw').send_keys(Keys.BACK_SPACE)   #Backspace键
driver.find_element_by_id('kw').send_keys(Keys.SPACE)        #Space键
driver.find_element_by_id('kw').send_keys(Keys.DELETE)       #Delete键
driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'a')  # CTRL + A
driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'x')  # CTRL + X
driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'v')  # CTRL + V
driver.find_element_by_id('kw').send_keys(Keys.ENTER)        #ENTER键
driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'c')  # CTRL + C
driver.find_element_by_id('kw').send_keys(Keys.TAB)          # TAB键

关闭浏览器

driver.close()  #关闭当前窗口
driver.quit()   #退出浏览器
原文地址:https://www.cnblogs.com/PrettyTom/p/12367789.html