1. 定位頁面(多窗口切換)
WebDriver提供了處理多個窗口的能力,這是通過使用“WebDriver.switchTo.window()”方法來切換到已知名稱的窗口來實現(xiàn)的。如果名稱未知,您可以使用“WebDriver.getWindowHandles()”獲取已知窗口列表。您可以將句柄傳遞給switchTo.window()。
-
獲取當(dāng)前窗口句柄
driver.current_window_handle -
返回的所有窗口的句柄到當(dāng)前會話
driver.window_handles -
切換窗口,可以實現(xiàn)在不同的窗口之間切換。
switch_to.window()
示例代碼:
# 模擬按下回車鍵進(jìn)行搜索
search_box.send_keys(Keys.RETURN)
# 等待頁面加載
driver.implicitly_wait(15)
# 切換新窗口
window_handles = driver.window_handles
driver.switch_to.window(window_handles[1])
2. 定位界面元素
WebDriver中的find_element() 方法用來查找元素,并返回 WebElement 對象。其中,find_element是直接WebElement 對象,find_elements是直接WebElement 對象的列表(list),也就是多個對象(需要注意)。
詳細(xì)內(nèi)容參考官方文檔,https://www.selenium.dev/documentation/webdriver/elements/。舉例介紹如下:
<html>
<body>
<style>
.information {
background-color: white;
color: black;
padding: 8px;
}
</style>
<h2>Contact Selenium</h2>
<form action="/action_page.php">
<input type="radio" name="gender" value="m" />Male
<input type="radio" name="gender" value="f" />Female <br>
<br>
<label for="fname">First name:</label>
<input class="information" type="text" id="fname" name="fname" value="Jane"><br><br>
<label for="lname">Last name:</label>
<input class="information" type="text" id="lname" name="lname" value="Doe"><br><br>
<label for="newsletter">Newsletter:</label>
<input type="checkbox" name="newsletter" value="1" /><br><br>
<input type="submit" value="Submit">
</form>
<p>To know more about Selenium, visit the official page
<a href ="www.selenium.dev">Selenium Official Page</a>
</p>
<div id='adddiv'>增加div看看</div>
</body>
</html>
定位方式 | By | 說明 |
---|---|---|
id | By.ID | 定位ID屬性與搜索值匹配的元素 |
name | By.NAME | 定位NAME屬性與搜索值匹配的元素 |
class_name | By.CLASS_NAME | 定位具有包含搜索值的類名的元素(不允許使用復(fù)合類名) |
tag_name | By.TAG_NAME | 定位標(biāo)簽名與搜索值匹配的元素 |
link_text | By.LINK_TEXT | 定位可見文本與搜索值匹配的錨點元素 |
partial_link_text | By.PARTIAL_LINK_TEXT | 定位可見文本部分與搜索值匹配的錨點元素 |
css_selector | By.CSS_SELECTOR | 定位與CSS選擇器匹配的元素 |
xpath | By.XPATH | 定位與XPath表達(dá)式匹配的元素 |
class name
HTML頁面的Web元素可以具有class屬性。在上面的HTML代碼片段中可以看到一個示例。我們可以使用Selenium中的class name定位器來識別這些元素。
driver = webdriver.Chrome()
driver.find_element(By.CLASS_NAME, "information")
css selector
CSS是用于樣式化HTML頁面的語言。我們可以使用css selector定位器策略來識別頁面上的元素。如果元素具有id,則創(chuàng)建定位器為css = #id。否則,我們遵循的格式是css =[attribute=value]。讓我們從上面的HTML代碼片段中看一個示例。我們將使用css為First Name文本框創(chuàng)建定位器。
driver.find_element(By.CSS_SELECTOR, "#fname")
xpath
HTML文檔可以被視為XML文檔,然后我們可以使用xpath來定位感興趣的元素。XPath是從文檔的根開始遍歷的路徑,可以是絕對XPath或相對XPath。例如,/html/form/input[1]將返回男性單選按鈕?;蛘遆Path也可以是相對的,例如//input[@name=‘fname’]將返回名字文本框。讓我們使用xpath為女性單選按鈕創(chuàng)建定位器。
driver.find_element(By.XPATH, "http://input[@value='f']")
3. 操作
3.1. 鍵盤操作
鍵盤操作是指與網(wǎng)頁交互的任何鍵輸入設(shè)備的一種表示。使用鍵盤只能完成兩項操作:按下一個鍵和釋放按下的鍵。除了支持ASCII字符外,每個鍵盤按鍵都有指定的序列來表示可以按下或釋放。
例如,輸入關(guān)鍵字,按下回車鍵搜索。
# 在搜索框中輸入關(guān)鍵詞
search_box.send_keys("selenium")
# 模擬按下回車鍵進(jìn)行搜索
search_box.send_keys(Keys.RETURN)
3.2. 鼠標(biāo)鍵操作
鼠標(biāo)操作是指與網(wǎng)頁交互的任何指針設(shè)備的一種表示。使用鼠標(biāo)只能完成三項操作:按下一個按鈕、釋放按下的按鈕和移動鼠標(biāo)。Selenium提供了方便的方法,將這些動作以最常見的方式組合在一起。
這種方法結(jié)合了將鼠標(biāo)移動到元素的中心并按下和釋放鼠標(biāo)左鍵的動作,否則稱為“點擊”。
# 模擬用鼠標(biāo)點擊鏈接操作
clickable = driver.find_element(By.LINK_TEXT, "哈爾濱")
ActionChains(driver).click(clickable ).perform()
3.3. 界面加載等待
driver.implicitly_wait(n),n是設(shè)置時長,單位為秒。
隱性等待設(shè)置了一個時間,在一段時間內(nèi)網(wǎng)頁是否加載完成,如果完成了,就進(jìn)行下一步,在設(shè)置的時間內(nèi)沒有加載完成,則會報超時加載。
另外一點,隱性等待的設(shè)置是全局性的,在開頭設(shè)置過之后,整個的程序運(yùn)行過程中都會有效,都會等待頁面加載完成,不需要每次設(shè)置一遍。
4. 小結(jié)
完整代碼示例:
from selenium import webdriver
from selenium.webdriver import Keys, ActionChains
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
url = 'https://www.****'
driver.get(url)
driver.maximize_window()
search_box = driver.find_element(By.LINK_TEXT, "哈爾濱")
ActionChains(driver).click(search_box).perform()
driver.implicitly_wait(10)
# 獲取搜索框元素
search_box = driver.find_element(By.ID ,"search-input") # 按ID查詢
# 在搜索框中輸入關(guān)鍵詞
search_box.send_keys("群力家園(C區(qū))")
# 模擬按下回車鍵進(jìn)行搜索
search_box.send_keys(Keys.RETURN)
# 切換新窗口
window_handles = driver.window_handles
driver.switch_to.window(window_handles[1])
# 定位詳細(xì)鏈接
xpath = "http://*[@id='esfMain']/section/div/div/a"
driver.find_element(By.XPATH, xpath).click()
# 再切換窗口
window_handles = driver.window_handles
driver.switch_to.window(window_handles[3])
# 獲取詳細(xì)數(shù)據(jù)
selector2 = "#__layout > div > div.props-main.w-1170 > div.props-body > div.props-right > div.maininfo > div.info > div"
search_results2 = driver.find_element(By.CSS_SELECTOR, selector2)
search_results2.text
使用Selenium工具可以模擬人工操作應(yīng)用,完成相應(yīng)工作,以此提高工作效率。從技術(shù)角度來看,Selenium還是比較容易實現(xiàn)的。
參考:文章來源:http://www.zghlxwxcb.cn/news/detail-666661.html
測試界的飄柔. Selenium實現(xiàn)多頁面切換. CSDN博客. 2023.07
肖永威. 基于Selenium技術(shù)方案的爬蟲入門實踐. CSDN博客. 2023.08文章來源地址http://www.zghlxwxcb.cn/news/detail-666661.html
到了這里,關(guān)于基于Selenium技術(shù)方案的爬取界面內(nèi)容實踐的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!