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_allactionchains模拟鼠标移动
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个子元素