Maison > interface Web > js tutoriel > Explication détaillée sur l'utilisation du sélénium

Explication détaillée sur l'utilisation du sélénium

jacklove
Libérer: 2018-06-11 17:53:04
original
3272 Les gens l'ont consulté

Explication détaillée de l'utilisation du sélénium


*Le sélénium est principalement utilisé pour les tests automatisés et prend en charge plusieurs navigateurs. Il est principalement utilisé dans les robots d'exploration pour résoudre les problèmes de rendu JavaScript.
Simulez le navigateur pour charger la page Web. Lorsque les requêtes et urllib ne peuvent pas obtenir le contenu de la page Web normalement*

1 Déclarez l'objet navigateur
Notez un, le nom du fichier Python Ou. ne nommez pas le nom du package sélénium, ce qui entraînerait l'impossibilité d'importer

from selenium import webdriver
Copier après la connexion

webdriver peut être considéré comme le pilote du navigateur. Pour piloter le navigateur, webdriver doit être utilisé. . Voici Chrome à titre d'exemple

browser = webdriver.Chrome()
Copier après la connexion

2. Visitez la page et obtenez le html de la page Web

from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
print(browser.page_source) # browser.page_source是获取网页的全部htmlbrowser.close()
Copier après la connexion

3.
Élément unique

from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
input_first = browser.find_element_by_id('q')
input_second = browser.find_element_by_css_selector('#q')
input_third = browser.find_element_by_xpath('//*[@id="q"]')
print(input_first,input_second,input_third)
browser.close()
Copier après la connexion

Méthodes de recherche communes

find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
Copier après la connexion

Vous pouvez également utiliser la méthode générale

from selenium import webdriverfrom selenium.webdriver.common.by import By
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
input_first = browser.find_element(BY.ID,'q')#第一个参数传入名称,第二个传入具体的参数print(input_first)
browser.close()
Copier après la connexion

Éléments multiples, éléments multiples s

input_first = browser.find_elements_by_id('q')
Copier après la connexion

4. Interaction avec les éléments - entrez des mots-clés dans le champ de recherche pour la recherche automatique

from selenium import webdriver
import timebrowser = webdriver.Chrome()
browser.get('https://www.taobao.com')
input = browser.find_element_by_id('q')#找到搜索框input.send_keys('iPhone')#传送入关键词time.sleep(5)
input.clear()#清空搜索框input.send_keys('男士内裤')
button = browser.find_element_by_class_name('btn-search')#找到搜索按钮button.click()
Copier après la connexion

Plus d'opérations : http://selenium-python. readthedocs.io/api.html #module-selenium.webdriver.remote.webelement#Peut avoir des attributs, des captures d'écran, etc.

5. Actions interactives, piloter le navigateur pour effectuer des actions, simuler le glisser et supprimer des actions et attacher des actions à la chaîne d'actions Exécution en série

from selenium import webdriverfrom selenium.webdriver import ActionChains#引入动作链browser = webdriver.Chrome()
url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'browser.get(url)
browser.switch_to.frame('iframeResult')#切换到iframeResult框架source = browser.find_element_by_css_selector('#draggable')#找到被拖拽对象target = browser.find_element_by_css_selector('#droppable')#找到目标actions = ActionChains(browser)#声明actions对象actions.drag_and_drop(source, target)
actions.perform()#执行动作
Copier après la connexion

Plus d'opérations : http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common .action_chains

6. Exécuter JavaScript
Certaines actions peuvent ne pas fournir d'API, comme la liste déroulante de la barre de progression. À l'heure actuelle, nous pouvons exécuter JavaScript via le code

<. 🎜>
from selenium import webdriver
browser = webdriver.Chrome()
browser.get(&#39;https://www.zhihu.com/explore&#39;)
browser.execute_script(&#39;window.scrollTo(0, document.body.scrollHeight)&#39;)
browser.execute_script(&#39;alert("To Bottom")&#39;)
Copier après la connexion
7. Obtenir des informations sur l'élément

Obtenir les attributs

from selenium import webdriverfrom selenium.webdriver import ActionChains
browser = webdriver.Chrome()
url = &#39;https://www.zhihu.com/explore&#39;browser.get(url)
logo = browser.find_element_by_id(&#39;zh-top-link-logo&#39;)#获取网站logoprint(logo)
print(logo.get_attribute(&#39;class&#39;))
browser.close()
Copier après la connexion
Obtenir la valeur du texte

from selenium import webdriver
browser = webdriver.Chrome()
url = &#39;https://www.zhihu.com/explore&#39;browser.get(url)
input = browser.find_element_by_class_name(&#39;zu-top-add-question&#39;)
print(input.text)#input.text文本值browser.close()
Copier après la connexion
Obtenir l'identifiant, la position, le nom de l'étiquette, la taille

from selenium import webdriver
browser = webdriver.Chrome()
url = &#39;https://www.zhihu.com/explore&#39;browser.get(url)
input = browser.find_element_by_class_name(&#39;zu-top-add-question&#39;)
print(input.id)#获取idprint(input.location)#获取位置print(input.tag_name)#获取标签名print(input.size)#获取大小browser.close()
Copier après la connexion

8. Fonctionnement du cadre le cadre est équivalent à une page Web indépendante. Si vous recherchez une sous-catégorie dans le cadre réseau de la catégorie parent, vous devez basculer vers le cadre de la sous-catégorie. Si la sous-catégorie recherche la catégorie parent, vous devez également passer à

from selenium import webdriverfrom selenium.common.exceptions import NoSuchElementException
browser = webdriver.Chrome()
url = &#39;http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable&#39;browser.get(url)
browser.switch_to.frame(&#39;iframeResult&#39;)
source = browser.find_element_by_css_selector(&#39;#draggable&#39;)
print(source)try:
    logo = browser.find_element_by_class_name(&#39;logo&#39;)except NoSuchElementException:
    print(&#39;NO LOGO&#39;)
browser.switch_to.parent_frame()
logo = browser.find_element_by_class_name(&#39;logo&#39;)
print(logo)
print(logo.text)
Copier après la connexion

9 En attente

Attente implicite

Lorsque l'attente implicite est utilisée. pour exécuter le test, si WebDriver ne trouve pas l'élément dans le DOM, il continuera à attendre au-delà du temps défini. Ensuite, une exception indiquant que l'élément est introuvable est levée,
En d'autres termes, lorsque l'élément est trouvé. ou l'élément n'apparaît pas immédiatement, l'attente implicite attendra un certain temps avant de chercher dans le DOM. Le temps par défaut est 0

from selenium import webdriver
browser = webdriver.Chrome()
browser.implicitly_wait(10)#等待十秒加载不出来就会抛出异常,10秒内加载出来正常返回browser.get(&#39;https://www.zhihu.com/explore&#39;)
input = browser.find_element_by_class_name(&#39;zu-top-add-question&#39;)
print(input)
Copier après la connexion
Attente explicite

Spécifiez une condition d'attente et une attente maximale. temps. Le programme jugera si la condition est satisfaite dans le temps d'attente. Si elle est satisfaite, elle reviendra. Si elle n'est pas satisfaite, elle continuera à attendre. Si le temps est dépassé, elle lancera une exception.

from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC
browser = webdriver.Chrome()
browser.get(&#39;https://www.taobao.com/&#39;)wait = WebDriverWait(browser, 10)
input = wait.until(EC.presence_of_element_located((By.ID, &#39;q&#39;)))
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, &#39;.btn-search&#39;)))
print(input, button)
Copier après la connexion
Détails : http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.support.expected_conditions
title_is 标题是某内容
title_contains 标题包含某内容
presence_of_element_located 元素加载出,传入定位元组,如(By.ID, &#39;p&#39;)
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 frame加载并切换
invisibility_of_element_located 元素不可见
element_to_be_clickable 元素可点击
staleness_of 判断一个元素是否仍在DOM,可判断页面是否已经刷新
element_to_be_selected 元素可选择,传元素对象
element_located_to_be_selected 元素可选择,传入定位元组
element_selection_state_to_be 传入元素对象以及状态,相等返回True,否则返回False
element_located_selection_state_to_be 传入定位元组以及状态,相等返回True,否则返回False
alert_is_present 是否出现Alert
Copier après la connexion

11. - Réaliser le mouvement avant et arrière du navigateur pour parcourir différentes pages Web

import timefrom selenium import webdriver
browser = webdriver.Chrome()
browser.get(&#39;https://www.baidu.com/&#39;)
browser.get(&#39;https://www.taobao.com/&#39;)
browser.get(&#39;https://www.python.org/&#39;)
browser.back()time.sleep(1)
browser.forward()
browser.close()
Copier après la connexion
12 Cookies

La gestion des onglets ajoute un navigateur. fenêtre
from selenium import webdriver
browser = webdriver.Chrome()
browser.get(&#39;https://www.zhihu.com/explore&#39;)
print(browser.get_cookies())
browser.add_cookie({&#39;name&#39;: &#39;name&#39;, &#39;domain&#39;: &#39;www.zhihu.com&#39;, &#39;value&#39;: &#39;germey&#39;})
print(browser.get_cookies())
browser.delete_all_cookies()
print(browser.get_cookies())
Copier après la connexion

import timefrom selenium import webdriver
browser = webdriver.Chrome()
browser.get(&#39;https://www.baidu.com&#39;)
browser.execute_script(&#39;window.open()&#39;)
print(browser.window_handles)
browser.switch_to_window(browser.window_handles[1])
browser.get(&#39;https://www.taobao.com&#39;)time.sleep(1)
browser.switch_to_window(browser.window_handles[0])
browser.get(&#39;http://www.fishc.com&#39;)
Copier après la connexion
13. Gestion des exceptions

from selenium import webdriver
browser = webdriver.Chrome()
browser.get(&#39;https://www.baidu.com&#39;)
browser.find_element_by_id(&#39;hello&#39;)from selenium import webdriverfrom selenium.common.exceptions import TimeoutException, NoSuchElementException
browser = webdriver.Chrome()try:
    browser.get(&#39;https://www.baidu.com&#39;)except TimeoutException:
    print(&#39;Time Out&#39;)try:
    browser.find_element_by_id(&#39;hello&#39;)except NoSuchElementException:
    print(&#39;No Element&#39;)finally:
    browser.close()
Copier après la connexion
Cet article explique l'utilisation du sélénium Pour plus de contenu connexe, veuillez suivre le site Web chinois de php. .

Recommandations associées :

Comment effectuer une conversion 2D via CSS3


Explication détaillée des variables et de la portée JavaScript


Explication détaillée des paramètres de la méthode $.ajax()

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal