Selenium

    技术2024-11-13  7

    20.7.3

    WebDriver 对象——整个网页

    WebElement 对象——网页中的元素

    注意调用元素方法中

    element返回一个值,若多个符合,则返回第一个;若没有匹配的,则报错

    elements返回一个列表,若没有,则返回一个空列表

     

    周期性(每隔半秒钟)重新寻找该元素,直到该元素找到,

    或者超出指定最大等待时长,这时才 抛出异常

    wd.implicitly_wait(10)

     

    click方法点击的是元素的正中央

     

    获取元素中某属性的值

    element.get_attribute('class') #’outerHTML'返回当前元素全部html代码

    css

    #下列语句等价 elements = wd.find_elements_by_css_selector('div') elements = wd.find_elements_by_tag_name('div')

    用元素其他格式选择:[property = 'value'],value为空时查找全部

    element = wd.find_element_by_css_selector('[href="http://www.miitbeian.gov.cn"]') a[href*="miitbeian"] #查找所有<a>标签中href属性值中包含miitbeian的 a[href^="http"] #查找所有<a>标签中href属性值中以http开头的 a[href$="gov.cn"] #查找所有<a>标签中href属性值中以gov.cn结尾的

    选中元素中的元素

    元素1 > 元素2 #直接元素 元素1 元素2 #后代元素

    综合

    #class属性为footer1的div标签其直接子元素中class属性为copyright的span标签 div.footer1 > span.copyright .footer1 > .copyright .footer1 .copyright

     组选择用逗号','分割

    按次序选择节点

    span:nth-child(1) #标签类型为span,且为父元素(任意)的第1个子元素 div > span:nth-child(1) #标签类型为span,且父元素为div的第1个子元素 span:nth-child(1) #父元素(任意)的所有span子元素中的第一个 p:nth-last-child(1) p:nth-child(even) p:nth-child(odd) div + span #所有div元素后紧跟的兄弟节点span元素 div ~ span #div元素后所有的兄弟节点span元素

    <iframe>标签相当于另外一个页面,里面的内容不能直接被选择到

    pg.switch_to.frame("value") #value可以为iframe标签的id值或者name值 #或者直接用该frame标签 pg.switch_to.frame(wd.find_element_by_tag_name("iframe")) pg.switch_to.default_content() #返回到外部html

    切换到另一个标签页tabs,每一个标签页都有自己的handle值

    wd.current_window_handle #当前页面handle值 wd.window_handles #返回所有页面handle值列表 wd.switch_to.window('value') #切换到你要去的页面

    选择框

    1.radio\checkbox框直接.click()

    2.select框

    # 导入Select类 from selenium.webdriver.support.ui import Select # 创建Select对象 s = Select(wd.find_element_by_id("ss_single")) s.select_by_value('蔬菜') s.select_by_index(0) s.select_by_visible_text('') #即text s.deselect_by_value('蔬菜') ... s.deselect_all

    actionchains模拟鼠标移动

    from selenium.webdriver.common.action_chains import ActionChains ac = ActionChains(driver) # 鼠标移动到元素上 ac.move_to_element( driver.find_element_by_css_selector('[name="tj_briicon"]') ).perform()

    调用js下拉网页

    pg.execute_script("window.scrollTo(0, document.body.scrollHeight);") #为什么Y值不准?(document.body.scrollHeight-500) 为什么还是最底部?

    对话框

    #alert/confirm对话框 driver.switch_to.alert.text #获取对话框信息内容 driver.switch_to.alert.accept() #确定 driver.switch_to.alert.dismiss() #取消 #prompt对话框 driver.switch_to.alert.send_keys()

    其他功能

    driver.get_window_size() driver.set_window_size(x, y) driver.title driver.current_url driver.get_screenshot_as_file('1.png') #截屏

    手机模式

    mobile_emulation = { "deviceName": "Nexus 5" } chrome_options = webdriver.ChromeOptions() chrome_options.add_experimental_option("mobileEmulation", mobile_emulation) driver = webdriver.Chrome( desired_capabilities = chrome_options.to_capabilities())

    xpath:选择父节点【css无法实现,其parent属性为webdriver】

    / #根目录 /html/body/div #直接子节点 //div//p #相对路径 * #通配符 [@属性名='value'] *[@id='value'] [@class='value'] 与css不同的是class的值必须写全 p[@class="capital huge-city"] 要选择 style属性值 包含 color 字符串的 页面元素 ,可以这样 //*[contains(@style,'color')] 要选择 style属性值 以 color 字符串 开头 的 页面元素 ,可以这样 //*[starts-with(@style,'color')] //p[2] # p类型第2个的子元素 //p[last()] #倒数第一个 //p[last()-1] #倒数第2个子元素

     

     

    Processed: 0.025, SQL: 9