-
2020-11-26 22:22:52
1、原本代码如下如所示:
代码说明:使用显性等待,作用是,当这个元素出现时,点击,跳转到另一个页面
class IndexPage: invert_localtor=("xpath",'(//a[@class="btn btn-special"])[1]') def __init__(self,browser): self.browser=browser '''等待元素出现''' def wait_clickable(self,browser, locator): el = WebDriverWait(browser, 10, poll_frequency=0.3).until(ec.presence_of_all_elements_located(locator)) return el def click_pass(self): '''点击投标后,在投标详情页面''' t=self.wait_clickable(self.browser,self.invert_localtor).click()
报错:test_invest_error - AttributeError: 'list' object has no attribute 'click',(实际上就是 click_pass,因为test_invest_error方法调用该方法,没有贴代码)
思考:为什么是list,明明是单个元素点击?
调试:在wait_clickable方法中,print(el)
结果:[webElement:xxxxxxxx],说明是list形式打印。
调试2:所以把return el换成el[0],
结果:运行正确,仔细看,原来until(ec.presence_of_all_elements_located(locator))方法调用错误,不小心选择的是直到所有元素出现,应该是【presence_of_element_located】!!!!!!自己把自己坑了!!!!!!!!!!!!!!!!!!!!!!!!!
更多相关内容 -
WebDriverWait()等待方法:
2019-06-20 10:26:15显式等待 WebDriverWait():是针对于某个特定的元素设置的等待时间。 class WebDriverWait(object): def init(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None): 总体说明:在设置...显式等待 WebDriverWait():是针对于某个特定的元素设置的等待时间。
class WebDriverWait(object):
def init(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None):总体说明:在设置时间timeout内,每隔一段时间poll_frequency(默认0.5秒) 检测一次当前页面,元素是否存在,如果超过设置时间还检测不到则抛出异常ignored_exceptions,如果元素存在则立即反馈。
参数解释:
init()方法需要传参 driver、timeout、poll_frequency、ignored_exceptions;
driver:webdriver的驱动;
timeout:最长超时时间,默认以秒为单位;
poll_frequency:休眠时间(步长)的间隔检测间隔时间,默认0.5s;
ignored_exceptions: 超时后的异常信息,默认情况下抛 “NoSuchElementException"异常;官方的举例:
element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id(“someId”))is_disappeared = WebDriverWait(driver, 30, 1, (ElementNotVisibleException)).until_not(lambda x: x.find_element_by_id(“someId”).is_displayed())
等待方法:
#coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWaitbase_url = “http://www.baidu.com”
driver = webdriver.Firefox()
driver.implicitly_wait(5)
‘’‘隐式等待和显示等待都存在时,超时时间取二者中较大的’’’
locator = (By.ID,‘kw’)
driver.get(base_url)WebDriverWait(driver,10).until(EC.title_is(u"百度一下,你就知道"))
‘’‘判断title,返回布尔值’’’WebDriverWait(driver,10).until(EC.title_contains(u"百度一下"))
‘’‘判断title,返回布尔值’’’WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,‘kw’)))
‘’‘判断某个元素是否被加到了dom树里,并不代表该元素一定可见,如果定位到就返回WebElement’’’WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,‘su’)))
‘’‘判断某个元素是否被添加到了dom里并且可见,可见代表元素可显示且宽和高都大于0’’’WebDriverWait(driver,10).until(EC.visibility_of(driver.find_element(by=By.ID,value=‘kw’)))
‘’‘判断元素是否可见,如果可见就返回这个元素’’’WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,’.mnav’)))
‘’‘判断是否至少有1个元素存在于dom树中,如果定位到就返回列表’’’WebDriverWait(driver,10).until(EC.visibility_of_any_elements_located((By.CSS_SELECTOR,’.mnav’)))
‘’‘判断是否至少有一个元素在页面中可见,如果定位到就返回列表’’’WebDriverWait(driver,10).until(EC.text_to_be_present_in_element((By.XPATH,"//*[@id=‘u1’]/a[8]"),u’设置’))
‘’‘判断指定的元素中是否包含了预期的字符串,返回布尔值’’’WebDriverWait(driver,10).until(EC.text_to_be_present_in_element_value((By.CSS_SELECTOR,’#su’),u’百度一下’))
‘’‘判断指定元素的属性值中是否包含了预期的字符串,返回布尔值’’’#WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it(locator))
‘’‘判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False’’’
#注意这里并没有一个frame可以切换进去WebDriverWait(driver,10).until(EC.invisibility_of_element_located((By.CSS_SELECTOR,’#swfEveryCookieWrap’)))
‘’‘判断某个元素在是否存在于dom或不可见,如果可见返回False,不可见返回这个元素’’’
#注意#swfEveryCookieWrap在此页面中是一个隐藏的元素WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//[@id=‘u1’]/a[8]"))).click()
‘’‘判断某个元素中是否可见并且是enable的,代表可点击’’’
driver.find_element_by_xpath("//[@id=‘wrapper’]/div[6]/a[1]").click()
#WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//*[@id=‘wrapper’]/div[6]/a[1]"))).click()#WebDriverWait(driver,10).until(EC.staleness_of(driver.find_element(By.ID,‘su’)))
‘’‘等待某个元素从dom树中移除’’’
#这里没有找到合适的例子WebDriverWait(driver,10).until(EC.element_to_be_selected(driver.find_element(By.XPATH,"//*[@id=‘nr’]/option[1]")))
‘’‘判断某个元素是否被选中了,一般用在下拉列表’’’WebDriverWait(driver,10).until(EC.element_selection_state_to_be(driver.find_element(By.XPATH,"//*[@id=‘nr’]/option[1]"),True))
‘’‘判断某个元素的选中状态是否符合预期’’’WebDriverWait(driver,10).until(EC.element_located_selection_state_to_be((By.XPATH,"//[@id=‘nr’]/option[1]"),True))
‘’‘判断某个元素的选中状态是否符合预期’’’
driver.find_element_by_xpath(".//[@id=‘gxszButton’]/a[1]").click()instance = WebDriverWait(driver,10).until(EC.alert_is_present())
‘’‘判断页面上是否存在alert,如果有就切换到alert并返回alert的内容’’’
print instance.text
instance.accept()driver.close()
-
python爬虫笔记----4.Selenium库(自动化库)
2020-12-06 10:26:15keys('Python')#发送键 input.send_keys(Keys.ENTER)#敲入回车 wait = WebDriverWait(browser, 10)#等待元素加载出来 wait.until(EC.presence_of_element_located((By.ID, 'content_left')))print(browser.current_...4.Selenium库
(自动化测试工具,支持多种浏览器,爬虫主要解决js渲染的问题)
pip install selenium
基本使用
from selenium importwebdriverfrom selenium.webdriver.common.by importByfrom selenium.webdriver.common.keys importKeysfrom selenium.webdriver.support importexpected_conditions as ECfrom selenium.webdriver.support.wait importWebDriverWait
browser=webdriver.Chrome()try:
browser.get('https://www.baidu.com')
input= browser.find_element_by_id('kw')#通过id=kw查找
input.send_keys('Python')#发送键
input.send_keys(Keys.ENTER)#敲入回车
wait = WebDriverWait(browser, 10)#等待元素加载出来
wait.until(EC.presence_of_element_located((By.ID, 'content_left')))print(browser.current_url)print(browser.get_cookies())print(browser.page_source)finally:
browser.close()
声明浏览器对象
#声明浏览器对象(其他可查看官方文档)
from selenium importwebdriver
browser= webdriver.Chrome()#生成Chrome浏览器对象
browser =webdriver.Firefox()
browser=webdriver.Edge()
browser=webdriver.PhantomJS()
browser= webdriver.Safari()
访问页面
#访问页面
from selenium importwebdriver
browser=webdriver.Chrome()
browser.get('https://www.taobao.com')print(browser.page_source)#获取页面代码
browser.close()#关闭页面
查找元素
查找单个元素
#查找单个元素
from selenium importwebdriver
browser=webdriver.Chrome()
browser.get('https://www.taobao.com')
input_first= browser.find_element_by_id('q')#通过id
input_second = browser.find_element_by_css_selector('#q')#通过css选择器
input_third = browser.find_element_by_xpath('//*[@id="q"]')#通过xpath
print(input_first, input_second, input_third)
browser.close()
其他查找方式
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
也可以使用通用方法
input_first = browser.find_element(By.ID, 'q')
查找多个元素
#查找多个元素
lis = browser.find_elements_by_css_selector('.service-bd li')#其他也类似单个元素的查找方法,find_element_*变为find_elements_*
lis = browser.find_elements(By.CSS_SELECTOR, '.service-bd li')#也可以使用这种通用的
元素交互操作
(对获取的元素调用交互方法)
browser =webdriver.Chrome()
browser.get('https://www.taobao.com')
input= browser.find_element_by_id('q')#定位输入框(id='q')
input.send_keys('iPhone')#在搜索框输入iPhone
time.sleep(1)
input.clear()#清除搜索框
input.send_keys('iPad')#在搜索框输入iPad
button = browser.find_element_by_class_name('btn-search')#定位搜索按钮
button.click()#点击搜索按钮
(报错可能是chrome版本和chromedriver版本不匹配)
交互动作
将动作附加到动作链中串行执行
from selenium importwebdriverfrom selenium.webdriver importActionChains
browser=webdriver.Chrome()
url= 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'browser.get(url)
browser.switch_to.frame('iframeResult')#定位frame标签
source = browser.find_element_by_css_selector('#draggable')#定位到frame标签里的draggable
target = browser.find_element_by_css_selector('#droppable')
actions= ActionChains(browser)#动作链对象
actions.drag_and_drop(source, target)#把source拖拽到target上面
actions.perform()#执行动作
执行JavaScript
#进度条的拖拽
from selenium importwebdriver
browser=webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')#打开网页
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')#将网页下拉到最下端
browser.execute_script('alert("To Bottom")')#弹出alert提示框
获取元素信息
获取属性值,文本值,id,位置,标签名,大小
from selenium importwebdriverfrom selenium.webdriver importActionChains
browser=webdriver.Chrome()
url= 'https://www.zhihu.com/explore'browser.get(url)
logo= browser.find_element_by_id('zh-top-link-logo')
input= browser.find_element_by_class_name('zu-top-add-question')print(logo.get_attribute('class'))#获取属性值
print(logo.text)#获取文本值
print(logo.id)#获取id
print(logo.location)#获取位置
print(logo.tag_name)#获取标签名
print(logo.size)#获取大小
Frame
from selenium importwebdriverfrom selenium.common.exceptions importNoSuchElementException
browser=webdriver.Chrome()
url= 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'browser.get(url)
browser.switch_to.frame('iframeResult')#定位到frame
source = browser.find_element_by_css_selector('#draggable')#定位到frame里的选择器
try:
logo= browser.find_element_by_class_name('logo')exceptNoSuchElementException:print('NO LOGO')
browser.switch_to.parent_frame()#切换到父frame
logo = browser.find_element_by_class_name('logo')print(logo.text)
等待
隐式等待(当使用了隐式等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常, 换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是0)(没有太大必要)
from selenium importwebdriver
browser=webdriver.Chrome()
browser.implicitly_wait(10)
browser.get('https://www.zhihu.com/explore')
input= browser.find_element_by_class_name('zu-top-add-question')#如果元素加载出来则不会等待,没有加载出来则等待10秒
print(input)
显式等待
(如果没有加载出来则一直等待)
from selenium importwebdriverfrom selenium.webdriver.common.by importByfrom selenium.webdriver.support.ui importWebDriverWaitfrom selenium.webdriver.support importexpected_conditions as EC
browser=webdriver.Chrome()
browser.get('https://www.taobao.com/')
wait= WebDriverWait(browser, 10)#传入最长等待时间
input = wait.until(EC.presence_of_element_located((By.ID, 'q')))#传入等待条件(是否出现)(获取输入框)
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search')))#(是否可点击)(获取按钮)
print(input, button)
title_is 标题是某内容
title_contains 标题包含某内容
presence_of_element_located 元素加载出,传入定位元组,如(By.ID, 'p')
visibility_of_element_located 元素可见,传入定位元组
visibility_of 可见,传入元素对象
presence_of_all_elements_located 所有元素加载出
text_to_be_present_in_element 某个元素文本包含某文字
text_to_be_present_in_element_value 某个元素值包含某文字
frame_to_be_available_and_switch_to_it frame加载并切换
invisibility_of_element_located 元素不可见
element_to_be_clickable 元素可点击
staleness_of 判断一个元素是否仍在DOM,可判断页面是否已经刷新
element_to_be_selected 元素可选择,传元素对象
element_located_to_be_selected 元素可选择,传入定位元组
element_selection_state_to_be 传入元素对象以及状态,相等返回True,否则返回False
element_located_selection_state_to_be 传入定位元组以及状态,相等返回True,否则返回False
alert_is_present 是否出现Alert
前进后退
importtimefrom selenium importwebdriver
browser=webdriver.Chrome()
browser.get('https://www.baidu.com/')#打开百度
browser.get('https://www.taobao.com/')#打开淘宝
browser.back()#返回上一步(返回到百度)
time.sleep(1)
browser.forward()#前进(返回淘宝)
browser.close()
Cookies
from selenium importwebdriver
browser=webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')print(browser.get_cookies())#打印cookie
browser.add_cookie({'name': 'name', 'domain': 'www.zhihu.com', 'value': 'germey'})#添加cookie
print(browser.get_cookies())#打印cookie
browser.delete_all_cookies()#清空cookie
print(browser.get_cookies())#打印
选项卡管理
importtimefrom selenium importwebdriver
browser=webdriver.Chrome()
browser.get('https://www.baidu.com')#打开百度
browser.execute_script('window.open()')#新增选项卡
print(browser.window_handles)
browser.switch_to_window(browser.window_handles[1])#选择到第二个选项卡
browser.get('https://www.taobao.com')#打开淘宝
time.sleep(1)
browser.switch_to_window(browser.window_handles[0])#选择到第一个选项卡
browser.get('http://www.hao123.com')#打开网页
异常处理
from selenium importwebdriverfrom selenium.common.exceptions importTimeoutException, NoSuchElementException
browser=webdriver.Chrome()try:
browser.get('https://www.baidu.com')exceptTimeoutException:print('Time Out')try:
browser.find_element_by_id('hello')exceptNoSuchElementException:print('No Element')finally:
browser.close()
-
七步完美解决问题python爬虫极验滑动验证码问题!
2020-12-01 15:02:22return: None ''' self.browser.get(self.url) email = self.wait.until(EC.presence_of_element_located((By.ID, 'email'))) password = self.wait.until(EC.presence_of_element_located((By.ID, 'password'))) ...滑动验证码的识别介绍
本节目标:
用程序识别极验滑动验证码的验证,包括分析识别思路、识别缺口位置、生成滑块拖动路径、模拟实现滑块拼合通过验证等步骤。
准备工作:
本次案例我们使用Python库是Selenium,浏览器为Chrome。请确保已安装Selenium库和ChromeDriver浏览器驱动。
了解极验滑动验证码:
验证方式为拖动滑块拼合图像,若图像完全拼合,则验证成功,否则需要重新验证,如图所示:
接下来我们链接地址:https://account.geetest.com/login,打开极验的管理后台登录页面,完成自动化登录操作。
实现步骤:
① 初始化
初始化链接地址、创建模拟浏览器对象、设置登录账户和密码等信息。
EMAIL = '登录账户'
PASSWORD = '登录密码'
class CrackGeetest():
def __init__(self):
self.url = 'https://account.geetest.com/login'
self.browser = webdriver.Chrome()
#设置显示等待时间
self.wait = WebDriverWait(self.browser, 20)
self.email = EMAIL
self.password = PASSWORD
def crack():
pass
# 程序主入口
if __name__ == '__main__':
crack = CrackGeetest()
crack.crack()
② 模拟登录填写,点开滑块验证在实例化CrackGeetest对象后调用crack()方法开始模拟登录验证...
调用open()方法,打开登录界面,获取账户和密码输入框节点,完成账户和密码的输入。
调用get_geetest_button()方法获取滑动验证按钮,并点击。
class CrackGeetest():
#...
def get_geetest_button(self):
''' 获取初始验证按钮,return:按钮对象 '''
button = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'geetest_radar_tip')))
return button
def open(self):
''' 打开网页输入用户名密码, return: None '''
self.browser.get(self.url)
email = self.wait.until(EC.presence_of_element_located((By.ID, 'email')))
password = self.wait.until(EC.presence_of_element_located((By.ID, 'password')))
email.send_keys(self.email)
password.send_keys(self.password)
def crack(self):
# 输入用户名密码
self.open()
# 点击验证按钮
button = self.get_geetest_button()
button.click()
#...
#...
③ 获取并储存有无缺口的两张图片首先获取无缺口的验证图片,并保存到本地
获取滑块对象,并执行点击,让浏览器中显示有缺口图片
获取有缺口的验证图片,并保存到本地
def get_position(self):
''' 获取验证码位置, return: 验证码位置(元组) '''
img = self.wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'geetest_canvas_img')))
time.sleep(2)
location = img.location
size = img.size
top,bottom,left,right = location['y'],location['y']+size['height'],location['x'],location['x']+size['width']
return (top, bottom, left, right)
def get_screenshot(self):
''' 获取网页截图, return: 截图对象 '''
#浏览器截屏
screenshot = self.browser.get_screenshot_as_png()
screenshot = Image.open(BytesIO(screenshot))
return screenshot
def get_geetest_image(self, name='captcha.png'):
''' 获取验证码图片, return: 图片对象 '''
top, bottom, left, right = self.get_position()
print('验证码位置', top, bottom, left, right)
screenshot = self.get_screenshot()
#从网页截屏图片中裁剪处理验证图片
captcha = screenshot.crop((left, top, right, bottom))
captcha.save(name)
return captcha
def get_slider(self):
''' 获取滑块, return: 滑块对象 '''
slider = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'geetest_slider_button')))
return slider
def crack(self):
#...
# 获取验证码图片
image1 = self.get_geetest_image('captcha1.png')
# 点按呼出缺口
slider = self.get_slider()
slider.click()
# 获取带缺口的验证码图片
image2 = self.get_geetest_image('captcha2.png')
#...
④ 获取缺口位置对比两张图片的所有RBG像素点,得到不一样像素点的x值,即要移动的距离
BORDER = 6
INIT_LEFT = 60
class CrackGeetest():
def get_gap(self, image1, image2):
''' 获取缺口偏移量, 参数:image1不带缺口图片、image2带缺口图片。返回偏移量 '''
left = 65
for i in range(left, image1.size[0]):
for j in range(image1.size[1]):
if not self.is_pixel_equal(image1, image2, i, j):
left = i
return left
return left
def is_pixel_equal(self, image1, image2, x, y):
'''
判断两个像素是否相同
:param image1: 图片1
:param image2: 图片2
:param x: 位置x
:param y: 位置y
:return: 像素是否相同
'''
# 取两个图片的像素点(R、G、B)
pixel1 = image1.load()[x, y]
pixel2 = image2.load()[x, y]
threshold = 60
if abs(pixel1[0]-pixel2[0])
return True
else:
return False
def crack(self):
#...
# 获取缺口位置
gap = self.get_gap(image1, image2)
print('缺口位置', gap)
# 减去缺口位移
gap -= BORDER
⑤ 获取移动轨迹
模拟人的行为习惯(先匀加速拖动后匀减速拖动),把需要拖动的总距离分成一段一段小的轨迹
def get_track(self, distance):
'''
根据偏移量获取移动轨迹
:param distance: 偏移量
:return: 移动轨迹
'''
# 移动轨迹
track = []
# 当前位移
current = 0
# 减速阈值
mid = distance * 4 / 5
# 计算间隔
t = 0.2
# 初速度
v = 0
while current < distance:
if current < mid:
# 加速度为正2
a = 2
else:
# 加速度为负3
a = -3
# 初速度v0
v0 = v
# 当前速度v = v0 + at
v = v0 + a * t
# 移动距离x = v0t + 1/2 * a * t^2
move = v0 * t + 1 / 2 * a * t * t
# 当前位移
current += move
# 加入轨迹
track.append(round(move))
return track
def crack(self):
#...
# 获取移动轨迹
track = self.get_track(gap)
print('滑动轨迹', track)
⑥ 按照轨迹拖动,完全验证
def move_to_gap(self, slider, track):
'''
拖动滑块到缺口处
:param slider: 滑块
:param track: 轨迹
:return:
'''
ActionChains(self.browser).click_and_hold(slider).perform()
for x in track:
ActionChains(self.browser).move_by_offset(xoffset=x, yoffset=0).perform()
time.sleep(0.5)
ActionChains(self.browser).release().perform()
def crack(self):
#...
# 拖动滑块
self.move_to_gap(slider, track)
success = self.wait.until(
EC.text_to_be_present_in_element((By.CLASS_NAME, 'geetest_success_radar_tip_content'), '验证成功'))
print(success)
⑦ 完成登录
def login(self):
''' 执行登录 return: None '''
submit = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'login-btn')))
submit.click()
time.sleep(10)
print('登录成功')
def crack(self):
#...
# 失败后重试
if not success:
self.crack()
else:
self.login()
-
Selenium 自动登录淘宝,我无意间发现了登录漏洞!
2020-10-17 10:01:57SELECTOR, 'div.fm-field > div.input-plain-wrap.input-wrap-loginid > input' ))) input_password = self.wait.until(EC.presence_of_element_located(( By.CSS_SELECTOR, 'div.fm-field > div.input-... -
selenium显示等待WebDriverWait的使用
2021-11-12 10:51:12WebDriverWait(显示等待)(推荐使用) ...poll_frequency: 调用until或until_not中的方法的间隔时间,默认是0.5秒 ignored_exceptions: 忽略的异常,如果在调用until或until_not的过程中抛出这个元组中的 -
python爬虫笔记——Selenium的初级使用
2020-06-23 12:43:27input = wait.until(EC.presence_of_element_located((By.ID,'zu-top-add-question'))) print(input.text) #获取节点间内容 #driver.close() 10、expected_conditions EC 模块 导入模块:from selenium.webdriver.... -
Python使用Selenium爬取淘宝异步加载的数据方法
2019-04-17 15:09:00EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > input')) ) submit=wait.until( EC.element_to_be_clickable((By.CSS_SELECTOR, '#mainsrp-pager > div > ... -
爬虫学习之淘宝美食信息
2018-09-08 18:23:40一、模拟搜索操作 通过selenium库的css选择器来对搜索框和搜索按钮来进行定位 def search(): try: browser.get('... input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#q... -
python自动化测试——显式等待【专辑】
2020-04-10 09:44:17之前有提到过等待函数,等待函数分为:强制等待(sleep)、隐式等待(implicitly_wait),显示等待(WebDriverWait),这次以显示等待方式专门做一次总结,因为我个人是比较喜欢用这种等待方式。 2.显式等待 显示等待... -
python爬虫之selenium的使用
2019-06-18 14:36:00input_tag=wait.until(EC.presence_of_element_located((By.ID, "kw"))) #3、在搜索框在输入要搜索的内容 input_tag.send_keys( '秦时明月') # 4、按键盘回车键 input_tag.send_keys(Keys.ENTER) time.sleep( 3)... -
selenium+phantomjs爬取bilibili
2021-03-16 03:48:34print('跳转到新窗口') all_h = browser.window_handles #获取所有窗口句柄 browser.switch_to.window(all_h[1]) #switch_to.window 标签页跳转 get_source() total = WAIT.until(EC.presence_of_element_located(... -
selenium WebDriverWait类等待机制的实现
2020-08-01 13:26:07of_element_located():判断某个元素是否存在DOM中,不一定可见,存在返回该元素对象 result12=WebDriverWait(driver,10,0.2).until(EC.presence_of_element_located(By.ID,'kw')) staleness_of(webelement):... -
Python中selenium模块
2020-12-07 12:14:43input_tag= browser.find_element_by_id('kw') input_tag.send_keys('美女') input_tag.send_keys(Keys.ENTER)#输入回车 wait=WebDriverWait(browser,10) wait.until(EC.presence_of_all_elements_located((By.ID,'... -
python selenium 显示等待WebDriverWait与条件判断expected_conditions举例
2017-06-30 23:40:56WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'kw'))) '''判断某个元素是否被加到了dom树里,并不代表该元素一定可见,如果定位到就返回WebElement''' WebDriverWait(driver,10).until... -
selenium+python(基础)
2019-09-27 17:01:46功能展示 from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by ...from selenium.webdriver.support import expected_conditions as EC from se... -
2.9.1.3Python-请求库_selenium
2020-02-08 17:19:52keys(Keys.ENTER) #点击查询 wait = WebDriverWait(browser, 10) #等待10秒 wait.until(EC.presence_of_element_located((By.ID, 'content_left'))) #查找 print(browser.current_url) #当前测试地址 print... -
爬虫学习笔记:Selenium爬取淘宝美食 附完整代码
2018-07-06 14:22:23wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.m-itemlist .items .item'))) get_products() except TimeoutException: index_page(page) 4.解析商品列表 这里我是直接用Chrome浏览器... -
Python3+Selenium获取session和token供Requests使用教程
2020-12-08 15:30:54/usr/bin/python3#coding:utf-8importtimefrom selenium importwebdriverfrom selenium.webdriver.support.wait importWebDriverWaitfrom selenium.webdriver.support importexpected_conditions as ECfrom selen..... -
Python爬虫系列(十三) 用selenium爬取京东商品
2020-12-03 18:06:3710) def init_variable(self): self.data = zip() self.isLast = False def parse_page(self): try: skus = self.wait.until(EC.presence_of_all_elements_located((By.XPATH,'//li[@class="gl-item"]'))) skus = ... -
Python爬虫实践-破解哔哩哔哩滑动验证登录
2019-05-22 16:15:41c_full_bg=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'canvas.geetest_canvas_fullbg.geetest_fade.geetest_absolute'))) hide_element(c_slice) save_pic(c_background,'back') show_... -
webdriver中的等待——主要讲解WebDriverWait()
2019-04-02 15:33:23文章目录强制等待:sleep()隐式等待:implicitly_wait()显示等待:WebDriverWait()与until()或者until_not()方法结合使用WebDriverWait与expected_conditions结合使用显示等待,自定义等待条件 强制等待:sleep() ... -
找到并单击具有更改CSS选择器的元素(python)
2020-12-23 08:46:25我使用以下代码: def click_element_bycss(browser,css,timeout): element_present = EC.presence_of_element_located((By.CSS_SELECTOR,css)) WebDriverWait(browser, timeout).until(element_present) browser.... -
selenium出现“element not interactable”问题总结
2020-12-30 09:11:19“element not interactable”问题根因:元素不可交互,可能的原因及解决方法如下所示:1、检查元素的定位(XPATH、CSS_SELECTOR内的内容)是否写正确2、代码中元素进行获取...20,0.5).until(EC.presence_of_element_l... -
Python网络爬虫数据采集实战(六):Selenium库爬取京东商品
2020-03-14 15:03:16names = wait.until(EC.presence_of_all_elements_located((By.XPATH,'//div[@class="gl-i-wrap"]/div[3]/a/em'))) commits = wait.until(EC.presence_of_all_elements_located((By.XPATH,'//div[@class="gl-i-... -
selenium的webdriver三种等待方式(显式等待WebDriverWait+implicitly_wait隐式等待+sleep强制等待)
2020-03-23 10:46:22一个显式等待是你定义的一段代码,WebDriverWait,配合该类的until()和until_not()方法,每隔xx秒进行判定,用于等待某个条件发生然后再继续执行后续代码。超过设置的最长时间,抛出TimeoutExcep... -
关于python3网络爬虫开发实战,极验 滑索的遇到的问题
2018-05-27 19:45:25img = self.wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'geetest_canvas_img'))) time.sleep(2) location = img.location print(location) size = img.size top, bottom, left, right = ... -
Selenium的三种等待方式(强制等待、隐性等待、显性等待)
2020-07-04 14:19:25WebDriverWait(browser, 5, 0.5).until(EC.presence_of_all_elements_located((By.ID, "kw"))) 显示等待是明确提出要等什么,等某个条件满足后,去执行下一个 WebDriverWait 需要配合 until和until_not,程序每隔N秒... -
Python页面加载的等待方式
2021-04-27 07:47:34webdriver.Chrome() broswer.get('https://www.jd.com/') wait = WebDriverWait(broswer, 20) input_q = wait.until(EC.presence_of_element_located((By.ID, 'key'))) button = wait.until(EC.element_to_... -
Selenium 库学习笔记
2017-10-07 16:15:431、基本使用 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import ...EC from selenium.webdriver.support.wait