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:\Users\Administrator\AppData\Local\Google\Chrome\User 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() #清空
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