精华内容
下载资源
问答
  • 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 WebDriverWait

    base_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()

    展开全文
  • 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_...

    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()

    展开全文
  • 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'))) ...

    滑动验证码的识别介绍

    本节目标:

    用程序识别极验滑动验证码的验证,包括分析识别思路、识别缺口位置、生成滑块拖动路径、模拟实现滑块拼合通过验证等步骤。

    准备工作:

    本次案例我们使用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()

    展开全文
  • SELECTOR, '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-...
  • WebDriverWait(显示等待)(推荐使用) ...poll_frequency: 调用untiluntil_not中的方法的间隔时间,默认是0.5秒 ignored_exceptions: 忽略的异常,如果在调用untiluntil_not的过程中抛出这个元组中的
  • input = 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....
  • EC.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 > ...
  • 一、模拟搜索操作  通过selenium库的css选择器来对搜索框和搜索按钮来进行定位 def search(): try: browser.get('... input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#q...
  • 之前有提到过等待函数,等待函数分为:强制等待(sleep)、隐式等待(implicitly_wait),显示等待(WebDriverWait),这次以显示等待方式专门做一次总结,因为我个人是比较喜欢用这种等待方式。 2.显式等待 显示等待...
  • input_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)...
  • print('跳转到新窗口') 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(...
  • of_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:43
    input_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,'...
  • WebDriverWait(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...
  • keys(Keys.ENTER) #点击查询 wait = WebDriverWait(browser, 10) #等待10秒 wait.until(EC.presence_of_element_located((By.ID, 'content_left'))) #查找 print(browser.current_url) #当前测试地址 print...
  • wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.m-itemlist .items .item'))) get_products() except TimeoutException: index_page(page) 4.解析商品列表  这里我是直接用Chrome浏览器...
  • /usr/bin/python3#coding:utf-8importtimefrom selenium importwebdriverfrom selenium.webdriver.support.wait importWebDriverWaitfrom selenium.webdriver.support importexpected_conditions as ECfrom selen.....
  • 10) 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 = ...
  • c_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() ...
  • 我使用以下代码: 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....
  • element not interactable”问题根因:元素不可交互,可能的原因及解决方法如下所示:1、检查元素的定位(XPATH、CSS_SELECTOR内的内容)是否写正确2、代码中元素进行获取...20,0.5).until(EC.presence_of_element_l...
  • names = 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-...
  • 一个显式等待是你定义的一段代码,WebDriverWait,配合该类的until()和until_not()方法,每隔xx秒进行判定,用于等待某个条件发生然后再继续执行后续代码。超过设置的最长时间,抛出TimeoutExcep...
  • img = 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 = ...
  • WebDriverWait(browser, 5, 0.5).until(EC.presence_of_all_elements_located((By.ID, "kw"))) 显示等待是明确提出要等什么,等某个条件满足后,去执行下一个 WebDriverWait 需要配合 untiluntil_not,程序每隔N秒...
  • webdriver.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:43
    1、基本使用 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import ...EC from selenium.webdriver.support.wait

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,867
精华内容 1,146
关键字:

webdriverwait(browser, 5, 0.5).until(ec.presence_of_element_located