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

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

jacklove
jackloveoriginal
2018-06-11 17:53:043208parcourir

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

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()

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()

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()

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

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()

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

input_first = browser.find_elements_by_id('q')

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()

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()#执行动作

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;)
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()
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()
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()

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)

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)
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)
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

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()
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())

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;)
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()
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!

Déclaration:
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