Python selenium基集合,PythonSelenium,基础


如果你有一定的python基础 开始看python自动化 可以参考如下selenium基础

首先你需要查看浏览器版本  Chrome可以打开 chrome://settings/help 查看

知道版本后 再去 http://chromedriver.storage.googleapis.com/index.html 下载对应版本的webdriver

如果你是linux系统 解压到/usr/bin/目录下 并给予执行权限 chmod +x /usr/bin/chromedriver 其他系统可查度娘

其次导入包

from selenium import webdriver

如果没安装的话 请按照编辑器提示安装

之后就可以开始写代码了~

就跟学代码第一个程序是print('helloworld')一样 让我们自动化打开度娘吧~


from selenium import webdriver   # 导入webdriver包

import time  # 导入time模块

driver = webdriver.Chrome()    # 初始化一个谷歌浏览器实例:driver

还可以选择火狐或IE浏览器 Firefox()    Ie()

driver.maximize_window()        # 最大化浏览器

driver.get("https://www.baidu.com")  # 通过get()方法,打开一个url站点

driver.find_element_by_xpath("//*[@id='kw']").send_keys("百度一下")  # 搜索输入框输入百度一下
driver.find_element_by_xpath("//*[@id='su']").click()  #点击百度一下按钮

time.sleep(2)# 导入time模块,等待2秒

if driver.find_element_by_xpath("//*[@id='1']/h3/a[2]").is_displayed(): # 1.xpath定位 验证蓝色官方模块是否出现
print('test pass: element found by xpath')
try: # 异常处理
if driver.find_element_by_id("content_right"): # 2.id 定位 if True: 如果没找到会报错
print('test pass: element found by id')
time.sleep(1)
driver.find_elements_by_id('kw').clear()  # 清除文本
time.sleep(1)
driver.back()  # 浏览器返回操作
time.sleep(1)
driver.forward()  # 浏览器前进操作
time.sleep(1)
driver.back()  # 浏览器返回操作
time.sleep(1)
print("此时我回到了百度首页")
driver.refresh() # 刷新当前页面
# print(driver.capabilities['version'])  # 打印浏览器version的值
if driver.find_element_by_tag_name('map').is_displayed(): # 3.tag_name 定位map模块是否存在
print('test pass: element found by tag_name')
if driver.find_elements_by_link_text('新闻'): # 4.link_text 定位
print('test pass: element found by link_text')
if driver.find_elements_by_partial_link_text('hao'): # 5.partial_link_text 关键词定位 包含hao的文本
print('test pass: element found by partial_link_text')
if driver.find_element_by_class_name('s_ipt'): # 6.class_name 定位搜索框是否存在
print('test pass: element found by class_name')
if driver.find_element_by_name('wd'): # 7.name 定位搜索框是否存在
print('test pass: element found by name')
if driver.find_element_by_css_selector('#su'): # 8.css 定位搜索按钮是否存在
print('test pass: element found by css_selector')

#  8种元素定位方式


print(driver.find_element_by_id('s_lg_img').size)
handle = driver.current_window_handle
print(handle) # 打印当前窗口句柄
time.sleep(1)
url = driver.find_element_by_link_text('新闻').get_attribute('href')
print('新闻的url:'+ url)
time.sleep(1)
js = 'window.open("'+url+'")'
driver.execute_script(js) # 执行js命令 打开新闻页
time.sleep(2)
print(driver.current_url) # 获取当前页面的url
print(driver.title) # 获取当前页面的title
print('=======')
assert u'百度一下' in driver.title
if u'百度一下,你就知道'== driver.title:
print('Assertion test pass')
print('=======')

# driver.execute_script("scroll(0,2400)") # 这个是第二种方法,比较粗劣,大概的拖动多少像素
handles = driver.window_handles # 获取所有窗口句柄
print(handles)
for newhandle in handles:
if newhandle != handle:
driver.switch_to.window(newhandle)
# driver.find_element_by_id('xx').click() 可以在新窗口操作
target = driver.find_element_by_css_selector("#change-city") # 一定要切换句柄后才能操作
driver.execute_script("arguments[0].scrollIntoView();", target)# 移动到目标元素
print('找到目标元素了!!')
time.sleep(2)
driver.close() # 关闭新窗口
driver.switch_to.window(handles[0]) # 切换回原窗口
for i in driver.find_elements_by_css_selector('#u1>a'): # for循环 find_elements获取一个list 可用于获取所有的图片 类似文本模块等
print(i.text+':'+i.get_attribute('href'))
ele = driver.find_element_by_css_selector('#lg')
actionChains = ActionChains(driver)
actionChains.context_click(ele).send_keys(Keys.ARROW_DOWN).send_keys(Keys.ENTER).perform() # context_click()右键
time.sleep(3)

driver.get_screenshot_as_file('.//baidu.png') # 保存截图到当前目录下 名字可设为变量
driver.execute_script("window.alert('这是一个测试Alert弹窗');")
time.sleep(2)
# driver.switch_to.alert.accept() # 点击弹出里面的确定按钮
driver.switch_to.alert.dismiss() # 点击弹出上面的X按钮

# time.sleep(999) #调试功能可放前面调试 因为程序是按顺序执行 就不用一个一个等

# 处理iframe切换
# 有时候我们发现元素定位没问题,但就是找不到元素报错。可能需要处理iframe切换
# driver.switch_to.frame("iframe1") # 使用switch_to 切换

# ele= driver.find_element_by_id('s-bottom-layer-right').click() 全选操作 暂不行
# ele.send_keys(Keys.CONTROL + 'a')
# time.sleep(5)
# 验证控件是否被选中使用is_selected() 返回布尔值
# driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 'T')  # 打开新tab 暂不行
# time.sleep(3)
# print("新打开了一个窗口")
except Exception as e:
print("Exception found", format(e))

driver.quit()