zoukankan      html  css  js  c++  java
  • selenium笔记(1)

    selenium笔记(1)

    一、关闭页面:
    1.driver.close() 关闭当前页面
    2.driver.quit() 退出整个浏览器

    二、定位元素:
    1.find_element_by_id: 根据id来查找某个元素。等价于:
    submitTag=driver.find_element_by_id('su')
    submitTag1-driver.find_element(By.ID,'su') #如果要用这种方法 必须导入 from selenium.webdriver.common.by import By

    2.find_element_by-c1ass-name: 根据类名查找元素。等价于:
    submitTag=driver.find_element_by_c1ass_name('su')
    submitTag1=driver.find_element(By.CLASS_WAME,'SU')

    3.find_element_by-name: 根据name属性的值来查找元素。等价于:
    submitTag-driver.find_element_by_name('email')
    submitTagl=driver.find_element(By.MAME,'email')

    4.find_element_by_tag.name: 根据标签名来查找元素。等价于:
    submitTag=driver.find_element_by._tag.name(‘div')
    submitTagl=driver.find_element(By.TAG_MAME,’div’)

    5.find_element_by_xpath: 根据xpath来获取元素。等价于:
    submitTag =driver.find_element_by_xpath("//div")
    submitTag1-driver.find_element(By.XPATH,//div")

    6.find_element_by_css_selector: 根据css选择器选择元素。等价于:
    submitTag = driver.find_element_by_css_selector("//div')
    submitTag1 = driver.find_element(By.CSS_SELECTOR,"//div")

    注意:
    1.如果只是想要解析网页中的数据,那么推荐将网页源代码扔给lxml解析。因为lxml底层使用的是C语言,所以解析效率会更快
    2.如果是想要对元素进行一些操作,比如给一个文本框输入值,或者是点击某个按钮,那么久必须使用selenium给我们提供的查找元素的方法。

    三、常见表单元素 :
    1.input type='text/password/email/number'
    2.button input[type='submit']
    3.checkbox input[type='checkbox']
    4.select: 下拉列表

    操作表单元素:
    1.操作输入框:分为两步。第一步:找到这个元素。第二步:使用send_keys(value),将数据填充进去。示例代码如下:
    inputTag = driver.find_element_by_id("kw")
    inputTag.send_keys('python")
    使用clear方法可以清除输入框中的内容。示例代码如下:
    inputTag.clear()

    2.操作checkbox:因为要选中checkbox标签,在网页中是通过鼠标点击的。因此想要选中checkbox标签,那么先选中这个标签,然后执行click事件。示例代码如下:
    rereaberTag = adriver.find_element_by_name("resemberMe")
    rereaberTag.click() #执行鼠标点击 (选择) 取消选择在调用一次就行

    3.选择select:select元素不能直接点击。因为点击后还需要选中元素。这时候selenium就专门为select标签提供了一个类selenium.webdriver.support.ui.Select。将获取到的元素当成参数传到这个类中,创建这个对象。以后就可以使用这个对象进行选择了。示例代码如下:
    from selenium.webdriver.support.ui import Select
    #选中这个标签,然后使用Select创建对象
    selectTag=Select(driver.find_element_by_name("jumpHenu"))
    #根据索引选择
    selectTag.select_by_index(1)
    #根据值选择
    selectTag.select_by_value("http://www.95yueba.com")
    #根据可视的文木选择
    selectTag.select_by_visible_text("95秀客户端")
    #取简选中所有选项
    selectTag.deselect_all()

    四、行为链
    有时候在页面中的操作可能要有很多步,那么这时候可以使用鼠标行为链类 ActionChains来完成。比如现在要将鼠标移动到某个元素上并执行点击事件。那么示例代码如下:
    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains #导入行为链
    driver_path = r"D:Program Files (x86)GoogleChromeApplicationchromedriver.exe"
    driver = webdriver.Chrome(executable_path=driver_path)
    driver.get("https://www.baidu.com/")

    inputTag = driver.find_element_by_id('kw') #选中输入框标签
    submitBtn = driver.find_element_by_id('su') #点击按钮 (百度一下按钮)

    actions = ActionChains(driver) #创建一个行为链对象
    actions.move_to_element(inputTag) #鼠标移到输入框
    actions.send_keys_to_element(inputTag,'python') #输入键值
    actions.move_to_element(submitBtn) #点击提交
    actions.perform() #執行 行为链

    #更多鼠标相关操作:
    click_and_hold(element) 点击但不松开鼠标
    context_click(element) 右击
    double_click(element) 双击


    五、cookie操作:
    # 1.获取所有的 cookie:
    for cookie in driver.get_cookies():
    print(cookie)
    # 2.根据cookie的key获取value:
    value = driver.get(cookie(key)
    # 3.删除所有的cookie:
    driver.delete_all_cookies())
    # 4.删除某个 cookie:
    driver.delete_cookie(key)

    六、页面等待:
    现在的网而越来越多采用了Ajax技术,这样程序便不能确定何时某个元素完全加载出来了。如果实际页面等待时间过长导致某个dom元素还没出来,但是你的代码直接使用了这个WebElement,那么就会抛出NullPointer的异常。为了解决这个问题。所以Selenium提供了两种等待方式:一种是隐式等待、一种是显式等待。

    1.隐式等待(获取一个不存在的元素时,给定一个确切的时间(指定时间)):调用driver.implicitly_wait。那么在获取不可用的元素之前,会先等待10秒中的时间。示例代码如下:
    driver = webdriver.Chrome(executable_pathedriver_path)
    driver.implicitly_wait(16)
    #请求网页
    driver.get("https://www.douban.com/")

    2.显示等待:显示等待是表明某个条件成立后才执行获取元素的操作。也可以在等待的时候指定一个最大的时间,如果超过这个时间那么就抛出一个异常。显示等待应该使用selenium.webdriver.support.excepted.conditions 期望的条件和selenium.webdriver.support.ui.webDriverwait来配合完成。示例代码如下:
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverwait
    from selenium.webdriver.support import expected_conditions as EC

    driver_path = r"D:Program Files (x86)GoogleChromeApplicationchromedriver.exe"
    driver = webdriver.Chrome(executable_path=driver_path)
    driver.get("http://somedomain/url_that_delays_loading")
    try:
    element=WebDriverWait(driver,10).until( #最多等待10秒 知道until中的元素By.ID出现
    EC.presence_of_element_located((By.ID,"myDynamicElement"))
    )
    finally:
    driver. quit()




    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
    from lxml import etree
    import re
    import time
    
    class pages_url(object):
        driver_path = r"D:Program Files (x86)GoogleChromeApplicationchromedriver.exe"
    
        def __init__(self):
            self.driver = webdriver.Chrome(executable_path=pages_url.driver_path)
            self.url = "https://www.lagou.com/zhaopin/Python/?labelWords=label"
            self.position = []
    
        def run(self):
            self.driver.get(self.url)
            while True:
                source = self.driver.page_source
                self.page_list(source)
                #等待(请求时长)
                WebDriverWait(driver=self.driver,timeout=10).until(
                    EC.presence_of_element_located((By.XPATH,"//div[@class='pager_container']/a[last()]"))
                )
                try:
                    next_btn = self.driver.find_element_by_xpath("//div[@class='pager_container']/a[last()]")      #点击下一页
                    if "page_no pager_next_disabled" in next_btn.get_attribute("class"):
                        break
                    else:
                        next_btn.click()
                except:
                    print(source)
                time.sleep(1)
    
        def page_list(self,source):
            html = etree.HTML(source)
            page_xqy_list = html.xpath("//a[@class='position_link']/@href")             #得到首页(1)子链接
            print(page_xqy_list)
            print("1121")
            for page_xqy in page_xqy_list:
                print(page_xqy)
                self.page_xq(page_xqy)                          #访问子链接(详情页)
                time.sleep(1)
    
        #详情页
        def page_xq(self,page_xqy):
            # self.driver.get(page_xqy)
            print(page_xqy)
            self.driver.execute_script("window.open('%s')" %page_xqy)           #打开新窗口
            self.driver.switch_to_window(self.driver.window_handles[1])         #在新窗口作业
            # try:
            #     WebDriverWait(driver=self.driver, timeout=10).until(
            #     EC.presence_of_element_located((By.XPATH,"//div[@class='job-name']/span[@class='name']"))
            #     )
            # except:
            #     print("chucou")
            source = self.driver.page_source
            self.page_allxq(source)                 #爬取详情页信息
            #关闭当前详情页
            self.driver.close()
            #继续切换回职位列表页
            self.driver.switch_to_window(self.driver.window_handles[0])
    
            #捕获详情页
        def page_allxq(self,source):
            html = etree.HTML(source)
    
            # zhiwei = html.xpath("//span[@class='name']/text()")[0].strip()
            xq = html.xpath("//dd[@class='job_request']//span")
            print("1")
            many = xq[0].xpath(".//text()")[0].strip()
            address = xq[1].xpath(".//text()")[0].strip()
            many = re.sub(r'[s/]','',many)
            address = re.sub(r'[s/]', '', address)
            jinyan = xq[2].xpath(".//text()")[0].strip()
            jinyan = re.sub(r'[s/]','',jinyan)
            xueli = xq[3].xpath(".//text()")[0].strip()
            xueli = re.sub(r'[s/]', '', xueli)
            ms_txt = ''.join(html.xpath("//dd[@class='job_bt']//text()")).strip()
            deac = {
                'many': many,
                'address': address,
                'jinyan': jinyan,
                'xueli': xueli,
                'ms_txt': ms_txt,
            }
            self.position.append(deac)
            print(deac)
    
    
    
    
    
    
    
    
    
    if __name__ == '__main__':
    
        pages = pages_url()
        pages.run()
        # print(pages.get_list())
    

      



  • 相关阅读:
    Educational Codeforces Round 20 D. Magazine Ad
    Educational Codeforces Round 20 C. Maximal GCD
    紫书第三章训练2 暴力集
    Educational Codeforces Round 20 B. Distances to Zero
    Educational Codeforces Round 20 A. Maximal Binary Matrix
    紫书第三章训练1 D
    紫书第一章训练1 D -Message Decoding
    HAZU校赛 Problem K: Deadline
    Mutual Training for Wannafly Union #8 D
    紫书第三章训练1 E
  • 原文地址:https://www.cnblogs.com/c-pyday/p/10543168.html
Copyright © 2011-2022 走看看