1付材、封裝一個(gè)函數(shù)樊零,判斷當(dāng)前元素是否存在
from selenium.common.exceptions import NoSuchElementException
def isElementExist(xpath_value,driver):
"""
用來(lái)判斷元素標(biāo)簽是否存在我磁,
"""
try:
element = driver.find_element_by_xpath(xpath_value)
# 原文是except NoSuchElementException, e:
except NoSuchElementException as e:
# 發(fā)生了NoSuchElementException異常,說(shuō)明頁(yè)面中未找到該元素驻襟,返回False
return False
else:
# 沒(méi)有發(fā)生異常夺艰,表示在頁(yè)面中找到了該元素,返回True
return True
2沉衣、通過(guò)xpath獲取href鏈接
正常情況下郁副,直接通過(guò)如下方式獲取即可
href_temp = browser.find_element_by_xpath('//*[@id="1"]/h3/a/@href')
但事實(shí)上,上述方法selenium會(huì)報(bào)錯(cuò)豌习,正確的應(yīng)該為:
href_answer = browser.find_element_by_xpath('//*[@id="1"]/h3/a')
href_link = href_answer.get_attribute('href')
3存谎、新開(kāi)Tab并在多個(gè)Tab中切換
# 通過(guò)執(zhí)行js來(lái)新開(kāi)一個(gè)窗口
new_tab_js = 'window.open("'+ href_link + '");'
browser.execute_script(new_tab_js)
# 輸出當(dāng)前窗口句柄(搜索結(jié)果頁(yè))
baidu_handle = browser.current_window_handle
# 獲取當(dāng)前窗口句柄集合
handles = browser.window_handles
# 獲取結(jié)果詳情頁(yè)窗口
result_handle = None
for handle in handles:
if handle != baidu_handle:
result_handle = handle
# 輸出當(dāng)前窗口句柄
browser.switch_to.window(result_handle)
#在詳情頁(yè)中找結(jié)果
get_result_detail(browser)
# 關(guān)閉當(dāng)前窗口
browser.close()
4、獲取span標(biāo)簽中的文本
answer_number = browser.find_element_by_xpath('//*[@id="qb-content"]/div[2]/span[2]').get_attribute('innerHTML')
5斑鸦、通過(guò)find_element_by_class_name
獲取元素失敗
根據(jù)Inspect獲取到class_name愕贡,當(dāng)去抓取時(shí)報(bào)錯(cuò)無(wú)該元素:
best_answer = browser.find_element_by_class_name('best-text mb-10')
這是因?yàn)槭褂肅SS選擇器的時(shí)候不允許使用空格,需要將class_name中的空格替換成英文的點(diǎn)“.”
best_answer = browser.find_element_by_class_name('best-text.mb-10')
6巷屿、通過(guò)find_element()
方法獲取元素
獲取元素除了指定獲取方式的方法固以,還有更靈活的方法
element = driver.find_element(by=by, value=value)
定位方式 | By |
---|---|
id | By.ID |
name | By.NAME |
class_name | By.CLASS_NAME |
tag_name | By.TAG_NAME |
link_text | By.LINK_TEXT |
partial_link_text | By.PARTIAL_LINK_TEXT |
css_selector | By.CSS_SELECTOR |
xpath | By.XPATH |