1、获取内容
通过a = find_element(By.ID, 'xxxx')
找到节点之后,可通过
a.text # 获取文本
a.get_attribute('?') # 获取属性
a.location # 获取位置 (例如:{'x': 734, 'y': 476})
a.tag_name # 标签名
a.size # 节点大小
2、切换Frame
browser.switch_to.frame('xxx')
进入子Frame
browser.switch_to.parent_frame()
返回父级Frame
3、延时等待
get()方法会在网页框架加载结束后结束运行,此时获取page_source可能不是完全加载的页面。如果有些网页有额外的Ajax请求,在网页源代码中不一定能够获取。这里就需要一些等待时间,确保节点都已经加载出来。
-
隐式等待
- 如果Selenium没有在DOM中找到节点,将继续等待设定的时间,超出时间后找不到节点,则抛出异常。
browser.implicitly_wait(10)
- 如果Selenium没有在DOM中找到节点,将继续等待设定的时间,超出时间后找不到节点,则抛出异常。
-
显式等待
-
比隐式条件要好,因为加载时间和网络因素有关会受到影响。
-
指定要找的节点,指定一个最长等待时间,如果找到则返回找到的节点,如果失败则抛出超时异常。
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 browser = webdriver.Chrome() browser.get('https://www.taobao.com/') wait = WebDriverWait(browser, 10) # 引入对象,指定最长等待时间 # 调用until方法,传入等待条件 `expected_conditions` 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)
等待条件 含义 EC.title_is 标题是某内容 EC.title_contains 标题包含某内容 EC.presence_of_element_located 节点加载出来,传入定位元组,如:(By.ID, ‘p’) EC.visibility_of_element_located 节点可见,传入定位于元组 EC.visibility_of 可见,传入节点对象 EC.presence_of_all_elements_located 所有节点都加载出来 EC.text_to_be_present_in_element 某节点文本包含某文字 EC.text_to_be_present_in_element_value 某节点值包含某文字 EC.frame_to_be_available_and_switch_to_it 加载并且切换 EC.invisibility_of_element_located 节点不可见 EC.element_to_be_clickable 节点可点击 EC.staleness_of 判断一个节点是否在DOM,可判断页面是否已经刷新 EC.element_to_be_selected 节点可选择,传节点对象 EC.element_located_to_be_selected 节点可选择,传入定位元组 EC.element_selection_state_to_be 传入节点对象以及状态,相等→True,else False EC.element_located_selection_state_to_be 传入定位元组及状态,同上 EC.alert_is_present 是否出现警告 … …
-
4、前进与后退
browser.back() browser.forward()
5、Cookies
Selenium方便对其操作
browser.get('https://www.zhihu.com/explore')
print(browser.get_cookies()) # 获取
browser.add_cookie({'name': 'name', 'domain': 'www.zhihu.com', 'value': 'germey'}) # 添加
print(browser.get_cookies())
browser.delete_all_cookies() # 清除
print(browser.get_cookies())
6、选项卡管理
browser.get('https://www.baidu.com')
browser.execute_script('window.open()') # Js语句开启一个选项卡
print(browser.window_handles)
browser.switch_to_window(browser.window_handles[1]) # 切换
browser.get('https://taobao.com') # 在第二个选项卡打开
time.sleep(1)
browser.switch_to_window(browser.window_handles[0]) # 切换
browser.get('https://python.org') # 打开
7、异常处理
很熟悉的 try except