Python+Selenium自动化总结

1、环境搭建

1.1、安装selenium模块文件

pip install selenium

1.2、安装ChromeDriver驱动

【1】下载安装Chrome浏览器。

【2】查看Chrome版本。

  • 点击Chrome菜单“帮助”→“关于Google Chrome”,查看Chrome的版本号。

    【3】下载对应ChromeDriver驱动。
  • 官方网站:https://sites.google.com/a/chromium.org/chromedriver
  • 下载地址:https://chromedriver.storage.googleapis.com/index.html

【4】环境变量配置。

  • 在Windows下,下载完成后,将ChromeDriver的可执行文件chromedriver.exe文件拖到Python的Scripts目录下。

1.3、安装GeckoDriver驱动(Firefox浏览器)

【1】下载GeckoDriver驱动。

  • 在GitHub上找到GeckoDriver的发行版本,然后根据自己的系统和位数选择对应的驱动下载。
  • GitHub:https://github.com/mozilla/geckodriver
  • 下载地址:https://github.com/mozilla/geckodriver/releases

【2】环境变量配置

  • 在Windows下,直接将geckodriver.exe文件拖到Python的Scripts目录下。

2、基本使用方法

2.1、初始化浏览器驱动

# 0、导入模块文件
from selenium import webdriver # 1、初始化浏览器为chrome浏览器
browser = webdriver.Chrome() # 2、初始化浏览器为firefox浏览器
browser = webdriver.Firefox() # 3、初始化浏览器为无界面的chrome浏览器
option = webdriver.ChromeOptions()
option.add_argument("headless")
driver = webdriver.Chrome(chrome_options=option)

2.2、设置浏览器大小

  • maximize_window():设置浏览器大小为全屏
  • set_window_size(500,500):设置浏览器分辨率为:500×500
from selenium import webdriver
import time browser = webdriver.Chrome()
browser.maximize_window() #设置浏览器大小:全屏
browser.get('https://www.baidu.com')
time.sleep(2) browser.set_window_size(500,500) # 分辨率 1280*800
time.sleep(2) browser.set_window_size(1024,768) # 分辨率 1024*768
time.sleep(2)

2.3、刷新浏览器页面

  • refresh()方法:刷新浏览器页面
from selenium import webdriver
import time browser = webdriver.Chrome()
browser.maximize_window() #设置浏览器大小:全屏
browser.get('https://www.baidu.com')
time.sleep(1) try:
browser.refresh() #刷新页面
print('刷新页面')
except Exception as e:
print('test fail') #输出内容:刷新页面

2.4、浏览器后退和前进

  • back():后退
  • forward():前进
from selenium import webdriver
import time browser = webdriver.Chrome()
browser.maximize_window() #设置浏览器大小:全屏
browser.get('https://www.baidu.com') #点击打开百度新闻页面
browser.find_element_by_link_text('新闻').click()
time.sleep(2) browser.back() #后退:回到百度首页
time.sleep(2) browser.forward() #前进:前进到百度新闻页面
time.sleep(2)

3、获取页面信息

3.1、页面title

  • title:获取当前页面的标题显示的字段
from selenium import webdriver
import time browser = webdriver.Chrome()
browser.get('https://www.baidu.com') #打印网页标题
print(browser.title)
#输出内容:百度一下,你就知道

3.2、页面URL

  • current_url:获取当前页面的URL
from selenium import webdriver
import time browser = webdriver.Chrome()
browser.get('https://www.baidu.com') #打印网页标题
print(browser.current_url)
#输出内容:https://www.baidu.com/

3.3、浏览器版本号

  • capabilities['version']):打印浏览器version的值
from selenium import webdriver
import time browser = webdriver.Chrome()
browser.get('https://www.baidu.com') #打印网页标题
print(browser.capabilities['version'])
#输出内容:67.0.3396.87

3.4、元素尺寸

  • size:返回元素的尺寸
from selenium import webdriver
import time browser = webdriver.Chrome()
browser.get('https://www.baidu.com') #定位输入框
input_box = browser.find_element_by_id('kw')
#打印输入框尺寸
print(input_box.size)
#输出内容:{'height': 22, 'width': 500}

3.5、元素的文本

  • text:返回元素的文本信息
from selenium import webdriver
import time browser = webdriver.Chrome()
browser.get('https://www.baidu.com') #定位备案元素
recordcode = browser.find_element_by_id('jgwab')
#打印备案元素信息
print(recordcode.text)
#输出内容:京公网安备11000002000001号

3.6、元素属性值

  • get_attribute('')方法
  • get_attribute('href'):获取href属性值
  • get_attribute('id'):获取id属性值
# coding=utf-8
import time
from selenium import webdriver driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(6)
driver.get("https://www.baidu.com")
time.sleep(1) for link in driver.find_elements_by_xpath("//*[@href]"):
print (link.get_attribute('href'))
driver.quit()

4、定位页面元素

4.1、ID定位元素

from selenium import webdriver
# 设置浏览器
browser = webdriver.Chrome()
#设置浏览器大小:全屏
browser.maximize_window()
#打开百度首页
browser.get('https://www.baidu.com/')
#定位百度搜索输入框之前,先分析下它的html结构
#<input type="text" class="s_ipt nobg_s_fm_hover" name="wd" id="kw" maxlength="100" autocomplete="off">
#发现它的 id="kw" ,接下来我们就通过id进行定位
try:
browser.find_element_by_id('kw').send_keys('哈哈')
print('test post:id')
except Exception as e:
print('test fail') #输出内容:test post:id

4.2、name定位元素

from selenium import webdriver
browser = webdriver.Chrome()
browser.maximize_window() #打开百度首页
browser.get('https://www.baidu.com/')
#搜索框的html结构:<input type="text" class="s_ipt nobg_s_fm_hover" name="wd" id="kw" maxlength="100" autocomplete="off">
# 根据name属性定位
try:
browser.find_element_by_name('wd').send_keys('哈哈')
print('test post:name')
except Exception as e:
print('test fail') #输出内容:test post:name

4.3、class定位元素

from selenium import webdriver
browser = webdriver.Chrome()
browser.maximize_window() #打开百度首页
browser.get('https://www.baidu.com/')
#搜索框的html结构:<input type="text" class="s_ipt nobg_s_fm_hover" name="wd" id="kw" maxlength="100" autocomplete="off">
# 根据class_name属性定位
try:
browser.find_element_by_class_name('s_ipt').send_keys('哈哈')
print('test post:class_name')
except Exception as e:
print('test fail') #输出内容:test post:class_name

4.4、tag_name定位元素

from selenium import webdriver
browser = webdriver.Chrome()
browser.maximize_window() #打开百度首页
browser.get('https://www.baidu.com/')
#搜索框的html结构:<input type="text" class="s_ipt nobg_s_fm_hover" name="wd" id="kw" maxlength="100" autocomplete="off">
# 根据tag_name属性定位
try:
browser.find_element_by_tag_name('form')
print('test post:tag_name')
except Exception as e:
print('test fail') #输出内容:test post:tag_name

4.5、link_text定位元素

  • link_text:根据跳转链接上面的文字来定位元素。
from selenium import webdriver
browser = webdriver.Chrome()
browser.maximize_window() #打开百度首页
browser.get('https://www.baidu.com/')
# 根据link_text属性定位元素“新闻”,然后点击按钮
try:
browser.find_element_by_link_text('新闻').click()
print('test post:tag_name')
except Exception as e:
print('test fail') #输出内容:test post:link_text

4.6、partial_link_text定位元素

  • 和link_text定位元素差不多,partial_link_text是通过文字信息中的部分字段来定位元素。
from selenium import webdriver
browser = webdriver.Chrome()
browser.maximize_window() #打开百度首页
browser.get('https://www.baidu.com/')
# 根据partial_link_text属性定位元素“新闻”,然后点击按钮
try:
browser.find_element_by_partial_link_text('闻').click()
print('test post:tag_name')
except Exception as e:
print('test fail') #输出内容:test post:partial_link_text

4.7、xpath定位元素

from selenium import webdriver
browser = webdriver.Chrome()
browser.maximize_window() #打开百度首页
browser.get('https://www.baidu.com/')
# 根据xpath定位元素
try:
browser.find_element_by_xpath('//*[@id="kw"]').send_keys('哈哈')
print('test post:xpath')
except Exception as e:
print('test fail') #输出内容:test post:xpath

4.8、CSS定位页面元素

from selenium import webdriver
browser = webdriver.Chrome()
browser.maximize_window() #打开百度首页
browser.get('https://www.baidu.com/')
# 根据css_selector定位元素
try:
browser.find_element_by_css_selector('#kw').send_keys('哈哈')
print('test post:xpath')
except Exception as e:
print('test fail') #输出内容:test post:css_selector

4.9、By定位

  • 除了使用上面的方法外,还可以利用find_element()方法,通过By来定位元素。
  • 使用之前需要导入By类:
#导入By类
from selenium.webdriver.common.by import By
  • 那么上面的方法还可以改写为:
browser.find_element(By.ID,'kw')
browser.find_element(By.NAME,'wd')
browser.find_element(By.CLASS_NAME,'s_ipt')
browser.find_element(By.TAG_NAME,'form')
browser.find_element(By.LINK_TEXT,'新闻')
browser.find_element(By.PARTIAL_LINK_TEXT,'闻')
browser.find_element(By.XPATH,'//*[@id="kw"]')
browser.find_element(By.CSS_SELECTOR,'#kw')

4.10、定位一组元素

  • 定位一组元素和定位某个元素差不多,唯一区别就是在单词element后面增加了一个s表示复数:
find_elements_by_id('')
find_elements_by_id_by_class_name('')
find_elements_by_tag_name('')
find_elements_by_link_text('')
find_elements_by_partial_link_text('')
find_elements_by_xpath('')
find_elements_by_css_selector('')

5、页面操作

5.1、输入内容:send_keys()

#定位输入框
input_box = browser.find_element_by_id('kw')
#输入内容
input_box.send_keys('关键字')

5.2、点击按钮:click()

#定位搜索按钮
button = browser.find_element_by_id('su')
button.click()

5.3、清空输入框:clear()

#定位输入框
input_box = browser.find_element_by_id('kw')
#清空输入框
input_box.clear()

5.4、模拟'回车'操作:submit()

  • submit():通常应用于提交表单;例如:搜索框输入内容后的回车操作。
from selenium import webdriver

browser = webdriver.Chrome()
browser.maximize_window()
browser.get('https://www.baidu.com') # 定位输入框
input_box = browser.find_element_by_id('kw')
# 输入关键词
input_box.send_keys('关键字')
# 模拟回车操作
input_box.submit()

5.5、单选框选中

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('http://news.baidu.com/')
time.sleep(1) try:
#定位搜索框下面的新闻全文和新闻标题单选项
radio_button = driver.find_elements_by_css_selector(".search-radios>input")
# 定位的一组元素后,返回的是一个列表,这里就循环选中对应的选项
for i in radio_button:
i.click()
print ('选中单选框.')
except Exception as e:
print ('fail',format(e))

5.5、复选框选中

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://passport.baidu.com/v2/?reg&tt=1529850358050&overseas=undefined&gid=02B2650-6D11-430E-A19D-529F69B9F1CE&tpl=xw&u=http%3A%2F%2Fnews.baidu.com%2F')
time.sleep(1) try:
#定位 阅读并接受《百度用户协议》及《百度隐私权保护声明》 的多选框
checkbox = driver.find_elements_by_css_selector("#TANGRAM__PSP_3__isAgree")
# 定位的一组元素后,返回的是一个列表,这里就循环选中对应的选项
for i in checkbox:
i.click()
print ('选中多选框')
except Exception as e:
print ('fail',format(e))

5.6、操作下拉框:Select模块(index)

  • selenium提供了Select模块,可以直接根据属性或索引定位。

【1】导入select方法:

from selenium.webdriver.support.select import Select

【2】Select模块中的定位方法。


'''1、三种选择某一选项项的方法''' select_by_index() # 通过索引定位;注意:index索引是从“0”开始。
select_by_value() # 通过value值定位,value标签的属性值。
select_by_visible_text() # 通过文本值定位,即显示在下拉框的值。 '''2、三种返回options信息的方法''' options # 返回select元素所有的options
all_selected_options # 返回select元素中所有已选中的选项
first_selected_options # 返回select元素中选中的第一个选项 '''3、四种取消选中项的方法''' deselect_all # 取消全部的已选择项
deselect_by_index # 取消已选中的索引项
deselect_by_value # 取消已选中的value值
deselect_by_visible_text # 取消已选中的文本值

【3】使用实例

'''这个是我百度首页搜索设置里面的一个下拉框html代码'''
html = '''
<select name="NR" id="nr">
<option value="10" selected="">每页显示10条</option>
<option value="20">每页显示20条</option>
<option value="50">每页显示50条</option>
</select>
''' # coding=utf-8
from selenium import webdriver
from selenium.webdriver.support.select import Select # 初始化
driver = webdriver.Chrome()
...... '''如果我们需要选择:50条,那么可以用下面的三种方法
先选中输入框元素,然后在选择对应选项'''
# 根据索引选择
Select(driver.find_element_by_name("NR")).select_by_index("2")
# 根据value值选择
Select(driver.find_element_by_name("NR")).select_by_value("50")
# 根据文本值选择
Select(driver.find_element_by_name("NR")).select_by_visible_text("每页显示50条") driver.quit()

5.7、多个浏览器窗口切换

切换浏览器窗口的时候将会用到的三个方法:

  • current_window_handle:获取当前窗口的句柄。
  • window_handles:返回当前浏览器的所有窗口的句柄。
  • switch_to_window():用于切换到对应的窗口。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com/") # 获取当前窗口句柄
seacher_windows = driver.current_window_handle # 跳转新页面
driver.find_element_by_xpath('//*[@id="block1_server"]/div[2]/ul/li[1]/div/div[1]/a[3]').click() all_handles = driver.window_handles
#回到首页
for handle in all_handles:
if handle != seacher_windows:
driver.switch_to.window(seacher_windows)

6、模拟鼠标操作:ActionChains类

【1】使用之前需要引入 ActionChains 类。

from selenium.webdriver.common.action_chains import ActionChains

【2】ActionChains类提供的鼠标常用方法:

  • perform():执行所有 ActionChains 中存储的行为。
  • context_click():右击
  • double_click():双击
  • drag_and_drop():拖到
  • move_to_element():鼠标悬停

6.1、鼠标右击实例

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains # 引入 ActionChains 类 browser = webdriver.Chrome()
browser.get('https://www.baidu.com') # 定位到要右击的元素
right_click = browser.find_element_by_link_text('新闻') # 对定位到的元素执行鼠标右键操作
#ActionChains(driver):调用ActionChains()类,并将浏览器驱动browser作为参数传入
#context_click(right_click):模拟鼠标双击,需要传入指定元素定位作为参数
#perform():执行ActionChains()中储存的所有操作,可以看做是执行之前一系列的操作
try:
ActionChains(browser).context_click(right_click).perform()
print('成功右击')
except Exception as e:
print('fail')
#输出内容:成功双击

注意:

  • ActionChains(driver):调用ActionChains()类,并将浏览器驱动browser作为参数传入
  • context_click(right_click):模拟鼠标双击,需要传入指定元素定位作为参数
  • perform():执行ActionChains()中储存的所有操作,可以看做是执行之前一系列的操作

6.2、鼠标右击:context_click()

#   鼠标右击
# 定位到要右击的元素
right_click = browser.find_element_by_id("xx") # 对定位到的元素执行右击操作
ActionChains(browser).move_to_element(right_click ).perform()

6.3、鼠标双击:double_click()

# 定位到要右击的元素
double_click = browser.find_element_by_id('xx') # 对定位到的元素执行鼠标右键操作
ActionChains(browser).context_click(double_click).perform()

6.4、鼠标拖动:drag_and_drop(source,target)

  • source:开始位置;需要拖动的元素
  • target:结束位置;拖到后需要放置的目的地元素
# 开始位置:定位到元素的原位置
source = driver.find_element_by_id("xx") # 结束位置:定位到元素要移动到的目标位置
target = driver.find_element_by_id("xx") # 执行元素的拖放操作
ActionChains(driver).drag_and_drop(source,target).perform()

6.5、鼠标悬停:move_to_element()

# 定位到要悬停的元素
move = driver.find_element_by_id("xx") # 对定位到的元素执行悬停操作
ActionChains(driver).move_to_element(move).perform()

7、模拟键盘操作

  • selenium中的Keys()类提供了大部分的键盘操作方法;通过send_keys()方法来模拟键盘上的按键。

【1】导入键盘类 Keys()

from selenium.webdriver.common.keys import Keys

7.1、常用的键盘操作:

  • send_keys(Keys.BACK_SPACE):删除键(BackSpace)
  • send_keys(Keys.SPACE):空格键(Space)
  • send_keys(Keys.TAB):制表键(TAB)
  • send_keys(Keys.ESCAPE):回退键(ESCAPE)
  • send_keys(Keys.ENTER):回车键(ENTER)
  • send_keys(Keys.CONTRL,'a'):全选(Ctrl+A)
  • send_keys(Keys.CONTRL,'c'):复制(Ctrl+C)
  • send_keys(Keys.CONTRL,'x'):剪切(Ctrl+X)
  • send_keys(Keys.CONTRL,'v'):粘贴(Ctrl+V)
  • send_keys(Keys.F1):键盘F1
  • .....
  • send_keys(Keys.F12):键盘F12

7.2、键盘操作实例

from selenium import webdriver
from selenium.webdriver.common.keys import Keys driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
#输入关键词内容
driver.find_element_by_id("kw").send_keys("selenium")
#删除键
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
#空格键
driver.find_element_by_id("kw").send_keys(Keys.SPACE)
#输入内容
driver.find_element_by_id("kw").send_keys("教程")
#全选(Ctrl+A)
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
#剪切(Ctrl+X)
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
#粘贴(Ctrl+V)
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'v')
#回车键
driver.find_element_by_id("kw").send_keys(Keys.ENTER)

8、设置页面等待加载条件

[toc]

如果遇到使用ajax加载的网页,页面元素可能不是同时加载出来的,这个时候,就需要我们通过设置一个等待条件,等待页面元素加载完成,避免出现因为元素未加载导致的错误的出现。

WebDriver提供了两种等待类型:显示等待、隐式等待。

8.1、显示等待:WebDriverWait()类+ExpectedCondition类

  • 显示等待:设置一个等待时间和一个条件,在规定时间内,每隔一段时间查看下条件是否成立,如果成立那么程序就继续执行,否则就提示一个超时异常(TimeoutException)。
  • 通常情况下WebDriverWait类会结合ExpectedCondition类一起使用。

【实例】

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
# 设置浏览器:driver 等待时间:20s
wait = WebDriverWait(driver, 20)
# 设置判断条件:等待id='kw'的元素加载完成
input_box = wait.until(EC.presence_of_element_located((By.ID, 'kw')))
# 在关键词输入:关键词
input_box.send_keys('关键词')

8.1.1、WebDriverWait的具体参数和方法:

WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
driver: 浏览器驱动
timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)
poll_frequency: 每次检测的间隔时间,默认是0.5秒
ignored_exceptions:超时后的异常信息,默认情况下抛出NoSuchElementException异常 until(method,message='')
method: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False
message: 如果超时,抛出TimeoutException,将message传入异常 until_not(method,message='')
until_not 与until相反,until是当某元素出现或什么条件成立则继续执行,
until_not是当某元素消失或什么条件不成立则继续执行,参数也相同。
method
message

8.1.2、设置页面加载判断条件:ExpectedCondition

  • ExpectedCondition中可使用的判断条件:
from selenium.webdriver.support import expected_conditions as EC

# 判断标题是否和预期的一致
title_is
# 判断标题中是否包含预期的字符串
title_contains # 判断指定元素是否加载出来
presence_of_element_located
# 判断所有元素是否加载完成
presence_of_all_elements_located # 判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0,传入参数是元组类型的locator
visibility_of_element_located
# 判断元素是否可见,传入参数是定位后的元素WebElement
visibility_of
# 判断某个元素是否不可见,或是否不存在于DOM树
invisibility_of_element_located # 判断元素的 text 是否包含预期字符串
text_to_be_present_in_element
# 判断元素的 value 是否包含预期字符串
text_to_be_present_in_element_value #判断frame是否可切入,可传入locator元组或者直接传入定位方式:id、name、index或WebElement
frame_to_be_available_and_switch_to_it #判断是否有alert出现
alert_is_present #判断元素是否可点击
element_to_be_clickable # 判断元素是否被选中,一般用在下拉列表,传入WebElement对象
element_to_be_selected
# 判断元素是否被选中
element_located_to_be_selected
# 判断元素的选中状态是否和预期一致,传入参数:定位后的元素,相等返回True,否则返回False
element_selection_state_to_be
# 判断元素的选中状态是否和预期一致,传入参数:元素的定位,相等返回True,否则返回False
element_located_selection_state_to_be #判断一个元素是否仍在DOM中,传入WebElement对象,可以判断页面是否刷新了
staleness_of

【调用方法如下】

WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息)

8.2、隐式等待:implicitly_wait()

  • implicitly_wait(xx):设置等待时间为xx秒,等待元素加载完成,如果到了时间元素没有加载出,就抛出一个NoSuchElementException的错误。
  • 注意:隐性等待对整个driver的周期都起作用,所以只要设置一次即可。
from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(30) # 隐性等待,最长等30秒 driver.get('https://www.baidu.com') print(driver.current_url)
print(driver.title)

8.3、强制等待:sleep()

  • 强制等待:不管浏览器元素是否加载完成,程序都得等待3秒,3秒一到,继续执行下面的代码。
from selenium import webdriver
from time import sleep driver = webdriver.Chrome()
driver.get('https://www.baidu.com') sleep(3) # 强制等待3秒再执行下一步 print(driver.title)
 

Python+Selenium自动化总结的更多相关文章

  1. python selenium自动化点击页面链接测试

    python selenium自动化点击页面链接测试 需求:现在有一个网站的页面,我希望用python自动化的测试点击这个页面上所有的在本窗口跳转,并且是本站内的链接,前往到链接页面之后在通过后退返回 ...

  2. python+selenium自动化登录dnf11周年活动界面领取奖励登录部分采坑总结[1]

    背景: Dnf的周年庆活动之一,游戏在6月22日 06:00~6月23日 06:00之间登陆过游戏后可以于6月25日 16:00~7月04日 06:00领取奖励 目标:连续四天自动运行脚本,自动领取所 ...

  3. Python+selenium 自动化-启用带插件的chrome浏览器,调用浏览器带插件,浏览器加载配置信息。

    Python+selenium 自动化-启用带插件的chrome浏览器,调用浏览器带插件,浏览器加载配置信息.   本文链接:https://blog.csdn.net/qq_38161040/art ...

  4. Python+Selenium自动化-定位一组元素,单选框、复选框的选中方法

    Python+Selenium自动化-定位一组元素,单选框.复选框的选中方法   之前学习了8种定位单个元素的方法,同时webdriver还提供了8种定位一组元素的方法.唯一区别就是在单词elemen ...

  5. Python+Selenium自动化-模拟键盘操作

    Python+Selenium自动化-模拟键盘操作   0.导入键盘类Keys() selenium中的Keys()类提供了大部分的键盘操作方法:通过send_keys()方法来模拟键盘上的按键. # ...

  6. Python+Selenium自动化-设置等待三种等待方法

    Python+Selenium自动化-设置等待三种等待方法   如果遇到使用ajax加载的网页,页面元素可能不是同时加载出来的,这个时候,就需要我们通过设置一个等待条件,等待页面元素加载完成,避免出现 ...

  7. Python+Selenium自动化-清空输入框、输入内容、点击按钮

    Python+Selenium自动化-清空输入框.输入内容.点击按钮   1.输入内容 send_keys('valve'):输入内容valve #定位输入框 input_box = browser. ...

  8. Python+Selenium自动化-设置浏览器大小、刷新页面、前进和后退

    Python+Selenium自动化-设置浏览器大小.刷新页面.前进和后退   1.设置浏览器大小 maximize_window():设置浏览器大小为全屏 set_window_size(500,5 ...

  9. Python+Selenium自动化-获取页面信息

    Python+Selenium自动化-获取页面信息   1.获取页面title title:获取当前页面的标题显示的字段 from selenium import webdriver import t ...

随机推荐

  1. 【原创】【基础】一文搞懂严蔚敏数据结构SqList &L和SqList L、ElemType &e和ElemType e

    旁白 最近小渔夫在看严蔚敏.李冬梅<数据结构 c语言版>(第2版),学到第二章顺序表的实现时,看到函数参数一会是SqList &L.一会又是SqList L.一会ElemType ...

  2. tidb初体验

    安装 docker-compose: https://github.com/pingcap/tidb-docker-compose pd tikv tidb各单个节点,单个副本,限制内存,cpu等,防 ...

  3. Rabbitmq 3.6.5以上版本修改端口号方法

    Rabbitmq 3.6.5以上版本修改端口号方法,网上查了下有一些方不管用,所以自己实践了引用官网说明 https://www.rabbitmq.com/configure.html#configu ...

  4. 技术面试问题汇总第003篇:猎豹移动反病毒工程师part3

    从现在开始,面试的问题渐渐深入.这次的三个问题,都是对PE格式的不断深入的提问.从最初的概念,到病毒对PE格式的利用,再到最后的壳的问题.这里需要说明的是,由于壳是一个比较复杂的概念,面试中也仅仅只能 ...

  5. hdu 2058 枚举区间和个数

    题意:       给你两个数n,m,意思是有一个序列长度n,他是1 2 3 4 ...n,然后让你输出所有连续和等于m的范围. 思路:       是个小水题,随便写几个数字就能发现规律了,我们可以 ...

  6. 通过 Netty、ZooKeeper 手撸一个 RPC 服务

    说明 项目链接 微服务框架都包括什么? 如何实现 RPC 远程调用? 开源 RPC 框架 限定语言 跨语言 RPC 框架 本地 Docker 搭建 ZooKeeper 下载镜像 启动容器 查看容器日志 ...

  7. 【python】Leetcode每日一题-打家劫舍2

    [python]Leetcode每日一题-打家劫舍2 [题目描述] 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金.这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋 ...

  8. 【apache】使用HttpClient,进行简单网页抓取

    1 package com.lw.httpclient.test; 2 import org.apache.http.client.methods.CloseableHttpResponse; 3 i ...

  9. C#事件总线

    目录 简介 实现事件总线 定义事件基类 定义事件参数基类 定义EventBus 使用事件总线 事件及事件参数 定义发布者 定义订阅者 实际使用 总结 参考资料 简介 事件总线是对发布-订阅模式的一种实 ...

  10. 推荐一个不得不知道的 Visual Studio 快捷键

    不得不说,Visual Studio 内置了很多非常棒的快捷键,借助于这些快捷键我们甚至不需要再使用鼠标,就可以快速高效的编写代码,因此学习和熟悉这些快捷键是值得的. 其中有一个快捷键是我非常喜欢,也 ...