element = browser.find_element_by_id("passwd-id")
element = browser.find_element_by_name("passwd")
element = browser.find_element_by_tag_name("input")
element = browser.find_element_by_xpath("//input[@id='passwd-id']")
# 多个条件用and
element = browser.find_element_by_xpath("//input[@id='passwd-id' and @name='passwd]")
再比如:
browser.find_element_by_xpath("//select[@class='ui-datepicker-year']/option[@value='" + str(year) + "']").click() # 多个标签嵌套查找
itemmake_val = browser.find_element_by_class_name('ui-datepicker-month')
allitemmake = itemmake_val.find_elements_by_tag_name('option')
allmonth = [t.get_attribute("value") for t in allitemmake] # 获取value值
browser.find_elements_by_xpath("//td[contains(@class, ' has-data')]//a") # 部分匹配查找
browser.find_element_by_xpath("//a[text()="+str(day)+"]") # 根据标签的文本查找
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
#鼠标移动至图片上 右键保存图片
elem_pic = driver.find_element_by_xpath("//div[@id='lg']/img")
print elem_pic.get_attribute("src")
action = ActionChains(driver).move_to_element(elem_pic)
action.context_click(elem_pic)
#重点:当右键鼠标点击键盘光标向下则移动至右键菜单第一个选项
action.send_keys(Keys.ARROW_DOWN)
time.sleep(3)
action.send_keys('v') #另存为
action.perform()
#获取另存为对话框(失败)
alert.switch_to_alert()
alert.accept()
保存文件
保存文件的时候不能更改文件名,可以用下列方法在每次保存后修改最新保存的文件的文件名
import os
filename = max([filepath + '\\' + f for f in os.listdir(filepath)], key=os.path.getctime)
os.rename(os.path.join(filepath, filename), os.path.join(filepath, newfilename))
页面等待
隐式等待是等待特定的时间,显式等待是指定某一条件直到这个条件成立时继续执行。
显式等待
显式等待指定某个条件,然后设置最长等待时间。如果在这个时间还没有找到元素,那么便会抛出异常了。
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 = webdriver.Chrome()
driver.get("http://somedomain/url_that_delays_loading")
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
finally:
driver.quit()
程序默认会 500ms 调用一次来查看元素是否已经生成,如果本来元素就是存在的,那么会立即返回。
下面是一些内置的等待条件,你可以直接调用这些条件,而不用自己写某些等待条件了。
title_is
title_contains
presence_of_element_located
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
invisibility_of_element_located
element_to_be_clickable – it is Displayed and Enabled.
staleness_of
element_to_be_selected
element_located_to_be_selected
element_selection_state_to_be
element_located_selection_state_to_be
alert_is_present
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID,'someid')))