Maison développement back-end Tutoriel Python Selenium+PhantomJs analyse et restitue les opérations de base de Js

Selenium+PhantomJs analyse et restitue les opérations de base de Js

Jun 05, 2019 pm 05:00 PM
phantomjs python selenium 爬虫

Certaines personnes disent que la bibliothèque Selenium et PhantomJ sont un outil polyvalent lorsqu'elles sont utilisées ensemble. Alors, sont-ils vraiment si puissants ? Jetons un coup d’œil à l’utilisation de la bibliothèque Selenium. A travers cet article, revenons sur le fonctionnement de la bibliothèque Selenium combinée avec PhantomJs, Chrome et autres navigateurs.

Selenium+PhantomJs analyse et restitue les opérations de base de Js

Qu'est-ce que Selenium

Selenium est un outil de test automatisé qui prend en charge certains navigateurs, notamment Chrome, Firefox, Safari, PhantomJs, etc. S'il est utilisé dans les robots d'exploration, nous l'utilisons principalement pour résoudre certains problèmes de rendu JavaScript.

Lorsque nous utilisons la bibliothèque Requests pour demander certaines pages Web, telles que 163music, les données de réponse que nous obtenons ne correspondent pas à toutes les informations que nous voyons dans le navigateur. Il peut être rendu via js. Ensuite, si nous utilisons la bibliothèque Selenium, nous ne nous soucierons plus de savoir comment résoudre ce problème.

Parce que notre navigateur, tel que PhantomJs, est un navigateur sans interface, il est utilisé pour restituer et analyser js, et la bibliothèque Selenium est chargée d'envoyer certaines commandes au navigateur et d'en simuler certaines, telles que les listes déroulantes et. glisser-déposer, tourner les pages, saisir un formulaire et d'autres actions. De cette façon, la combinaison des deux peut parfaitement résoudre ces problèmes de rendu JS.

Remarque

Bien que la bibliothèque Selenium plus PhantomJs soit très utile, après tout, elle pilote un navigateur et obtient ensuite des données. Ainsi, lorsque nous l'utiliserons, nous constaterons qu'il n'est pas aussi rapide que certaines bibliothèques d'analyse que nous utilisons. C’est en fait son inconvénient, c’est pourquoi je vous suggère quand même de ne pas les utiliser jusqu’à ce que vous ne trouviez vraiment pas de solution.

Préparation de l'installation

pip installe directement la bibliothèque Selenium :

pip install selenium
Copier après la connexion

Installation du pilote du navigateur :

Pilote du navigateur Chrome

Pilote de navigateur PhantomJs

Nous devons configurer le pilote de navigateur installé sur nos variables d'environnement. Pour les utilisateurs Windows, la configuration des variables d'environnement est plus compliquée. Nous devons trouver l'emplacement du pilote téléchargé, puis copier son emplacement de fichier et le coller dans la variable d'environnement.

La configuration est terminée, saisie en ligne de commande :

phantomjs -v

Vérifiez si l'opération a réussi.

Exemple d'utilisation

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
 
 
browser = webdriver.Chrome()
 
try:
    browser.get('http://www.yukunweb.com')
    input = browser.find_element_by_id('s')
    input.send_keys('Python')
    input.send_keys(Keys.ENTER)
    wait = WebDriverWait(browser, 10)
    wait.until(EC.presence_of_element_located((By.ID, 'main')))
    print(browser.current_url)
    print(browser.page_source)
finally:
    browser.close()
Copier après la connexion

Si nous exécutons le code ci-dessus, nous verrons qu'un navigateur Chrome est ouvert localement, puis j'entre l'URL de mon blog, alors il le fera saisissez automatiquement « Python » dans la barre de recherche et cliquez sur Entrée pour rechercher. Et imprimez l'URL et le code source de la page de résultats.

Nos exemples sont tous exploités à l'aide du navigateur Chrome, car PhantomJs n'a pas d'interface et il n'est pas pratique de voir l'effet. Si vous ne l'exécutez pas correctement, le navigateur n'est généralement pas ouvert, cela signifie que vous n'avez pas installé le navigateur Chrome ou que vous n'avez pas configuré le pilote avec des variables d'environnement.

Alors que signifient ces lignes de code, et quelles instructions leur donnons-nous ?

Déclarer l'objet navigateur

from selenium import webdriver
 
browser = webdriver.Chrome()
# 声明其他浏览器
browser = webdriver.PhantomJs()
browser = webdriver.Firefox()
Copier après la connexion

Cela équivaut à appeler la méthode webdriver de la bibliothèque Selenium pour instancier un navigateur Chrome pour nous appeler .

Visitez la page

from selenium import webdriver
 
browser = webdriver.Chrome()
browser.get('http://www.yukunweb.com')
Copier après la connexion

Nous transmettons l'url que nous voulons visiter à la méthode get. Appelez le navigateur pour accéder à l'URL.

Rechercher un élément

input = browser.find_element_by_id('s')
Copier après la connexion

Ce code appelle la méthode find_element_by_id Comme son nom l'indique, il s'agit de trouver la balise avec l'identifiant 's'. , alors s'il s'agit d'une opération. Si la classe est 's', c'est find_element_by_class('s').

Bien sûr, on peut aussi utiliser les sélecteurs CSS et les sélecteurs xpath pour trouver des éléments :

input = browser.find_element_by_css_selector("#s")
print(input)
input = browser.find_element_by_xpath('//*[@id="s"]')
print(input)
Copier après la connexion

En imprimant les résultats, vous pouvez voir que peu importe le sélecteur utilisé, les résultats de la recherche sont les même. Voici quelques API de recherche :

find_element_by_namefind_element_by_xpathfind_element_by_link_textfind_element_by_partial_link_textfind_element_by_tag_namefind_element_by_class_namefind_element_by_css_selector
Copier après la connexion

Trouver plusieurs éléments

Si l'élément que nous recherchons est la balise li dans la page Web, il existe de nombreux éléments. Ensuite, notre méthode de recherche est la même que pour un élément unique, sauf que pour l'API de recherche, nous devons ajouter une forme plurielle après l'élément. C'est-à-dire :

find_elements_by_namefind_elements_by_xpathfind_elements_by_link_textfind_elements_by_partial_link_textfind_elements_by_tag_namefind_elements_by_class_namefind_elements_by_css_selector
Copier après la connexion

L'opération interactive sur les éléments

consiste à émettre des instructions et à appeler des méthodes interactives pour les éléments que nous obtenons.

browser.get('http://www.yukunweb.com')
input = browser.find_element_by_id('s')
input.send_keys('Python')
input.send_keys(Keys.ENTER)
Copier après la connexion


Dans ce code, nous trouvons d'abord l'élément avec l'identifiant 's', puis lui passons la valeur 'Python', puis appelons la méthode interactive et tapons return voiture.

Bien sûr, dans la plupart des cas, nous ne pouvons pas utiliser directement la méthode consistant à appuyer sur Entrée, car nous ne savons pas si le formulaire a été soumis après avoir appuyé sur Entrée. Nous devons utiliser le finder pour trouver l'élément du bouton de soumission, puis simuler un clic :

button = browser.find_element_by_class_name('xxxx')
button.click()
# 清除表单信息
button.clear()
Copier après la connexion

Ensuite, nous pouvons voir que lors de la simulation de connexion, nous pouvons saisir directement le numéro de compte et le mot de passe manuellement. S'il y a un code de vérification, fournissez directement une méthode de saisie. Nous saisissons manuellement le code de vérification et le transmettons au formulaire. Est-il très simple de simuler la connexion ?

Actions interactives

元素交互动作与上面的操作是不同的。上面的操作需要获得一个特定的元素。然后对这个特定的元素调用一些指令,才可以完成交互。而这个交互是将这些动作附加到动作链中串行执行。

我们以拖拽元素为例(我们需要导入ACtionChains方法):

from selenium import webdriver
from selenium.webdriver import ActionChains
 
browser = webdriver.Chrome()
 
browser.get(url)
source = browser.find_element_by_name("source")
target = browser.find_element_by_name("target")
actions = ActionChains(browser)
actions.drag_and_drop(source, target).perform()
Copier après la connexion

这里的sourcs是我们要拖拽的元素,我们使用查找器找到他,target就是我们要拖拽到的位置元素。然后调用ActionChains方法,实现拖拽操作。

执行JavaScript

有些动作呢,Selenium库并没有为我们提供特定的api,比如说将浏览器进度条下拉,这个实现起来是很难的。那么我们就可以通过让Selenium执行JS来实现进度条的下拉,这个得需要一些js的知识,不过还是很简单的。

from selenium import webdriver
 
browser = webdriver.Chrome()
browser.get('http://www.yukunweb.com')
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
browser.execute_script('alert("到达底部")')
Copier après la connexion

这就相当于我们将一些JS命令传给Selenium的execute_script这个api,我们运行就可以看到浏览器下拉到底部,然后弹出会话框。

获取元素文本值

如果我们查找得到一个元素,我们要怎样获得元素的一些属性和文本信息呢?

from selenium import webdriver
 
browser = webdriver.Chrome()
 
browser.get('http://www.yukunweb.com')
name = browser.find_element_by_css_selector('#kratos-logo > a')
print(name.text)
print(name.get_attribute('href'))
Copier après la connexion

运行结果可以看到,他打印出了‘意外’和他的url。

Frame框架

有些网页在我们直接使用Selenium驱动浏览器打印源码的时候,并没有如期获得想要的数据,那在我们查看网页源码的时候,可以看到网页的iframe标签包裹的一个一个的框架。那么这就需要我们请求对应框架,拿到源码了。

我们以网易云音乐的歌手栏为例。

from selenium import webdriver
 
browser = webdriver.Chrome()
browser.get('https://music.163.com/#/discover/artist/signed/')
 
print(browser.page_source)
Copier après la connexion

可以查看结果,并没有我们想要的信息。

from selenium import webdriver
 
browser = webdriver.Chrome()
browser.get('https://music.163.com/#/discover/artist/signed/')
browser.switch_to.frame('contentFrame')
 
print(browser.page_source)
Copier après la connexion

这次打印,我们就可以看到我们需要的信息了,是不是很简单。

显示等待

在文章开始的时候,我们运行的那段代码中有一段代码是不是还没有说。那就是我们命令浏览器等待的操作。

等待有两种方式,一种是隐士等待,一种是显示等待。当使用了隐士等待执行时,如果浏览器没有找到指定元素,将继续等待,如果超出设定时间就会抛出找不到元素的异常。而大多数情况我们建议使用显示等待。

显示等待是你指定一个等待的条件,还指定一个最长等待时间。那么程序会在最长等待时间内,判断条件是否成立,如果成立,立即返回。如果不成立,他会一直等待,直到最长等待时间结束,如果条件仍然不满足,就返回异常。

wait = WebDriverWait(browser, 10)
wait.until(EC.presence_of_element_located((By.ID, 'main')))
Copier après la connexion

这里的By.ID方法实际上就是一个查找的万能方法,而我们直接查找或者使用CSS、xpath查找足够满足,我也不过多介绍,想要了解可以查看官方文档。

这里是知道查找到id为‘main’就返回。

显示等待的一些条件还有:

title_is 标题是某内容

title_contains 标题包含某内容

presence_of_element_located 元素加载出,传入定位元组,如(By.ID, ‘p’)

visibility_of_element_located 元素可见,传入定位元组

visibility_of_element_located 元素可见,传入定位元组

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


窗口选择

如果我们在表单输入关键词,提交表单后浏览器新打开了一个窗口,那么我们要怎么去操作新的窗口呢?索性Selenium为我们提供了对应的api.

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
 
browser = webdriver.Chrome()
browser.get('http://www.23us.cc/')
input = browser.find_element_by_id('bdcs-search-form-input')
input.send_keys('斗破苍穹')
input.send_keys(Keys.ENTER)
browser.switch_to_window(browser.window_handles[1])
print(browser.current_url)
time.sleep(1)
browser.switch_to_window(browser.window_handles[0])
print(browser.current_url)
Copier après la connexion

   

通过打印结果,不难看出先打印了搜索结果窗口url,然后打印了索引页url。要注意窗口的索引是从 0 开始的哦,这个大家都明白。

异常处理

异常处理和普通的异常处理一样,没有什么要说的,大家自己查看官方异常 api.地址

最后

D'accord, à travers cet article, j'espère que vous pourrez comprendre fondamentalement certaines des façons d'utiliser la bibliothèque Selenium combinée avec les pilotes de navigateur. Nous utilisons Chrome dans notre exemple, mais dans le code réel, il est préférable d'utiliser PhantomJs, car il n'a pas d'interface et fonctionne relativement mieux.

J'ai dit au début de l'article qu'il n'est généralement pas recommandé d'utiliser Selenium car il est très lent. Mais même si c’est lent, c’est quand même très cool, n’est-ce pas ?

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelle est la raison pour laquelle PS continue de montrer le chargement? Quelle est la raison pour laquelle PS continue de montrer le chargement? Apr 06, 2025 pm 06:39 PM

Les problèmes de «chargement» PS sont causés par des problèmes d'accès aux ressources ou de traitement: la vitesse de lecture du disque dur est lente ou mauvaise: utilisez Crystaldiskinfo pour vérifier la santé du disque dur et remplacer le disque dur problématique. Mémoire insuffisante: améliorez la mémoire pour répondre aux besoins de PS pour les images à haute résolution et le traitement complexe de couche. Les pilotes de la carte graphique sont obsolètes ou corrompues: mettez à jour les pilotes pour optimiser la communication entre le PS et la carte graphique. Les chemins de fichier sont trop longs ou les noms de fichiers ont des caractères spéciaux: utilisez des chemins courts et évitez les caractères spéciaux. Problème du PS: réinstaller ou réparer le programme d'installation PS.

Comment résoudre le problème du chargement lorsque PS est démarré? Comment résoudre le problème du chargement lorsque PS est démarré? Apr 06, 2025 pm 06:36 PM

Un PS est coincé sur le "chargement" lors du démarrage peut être causé par diverses raisons: désactiver les plugins corrompus ou conflictuels. Supprimer ou renommer un fichier de configuration corrompu. Fermez des programmes inutiles ou améliorez la mémoire pour éviter une mémoire insuffisante. Passez à un entraînement à semi-conducteurs pour accélérer la lecture du disque dur. Réinstaller PS pour réparer les fichiers système corrompus ou les problèmes de package d'installation. Afficher les informations d'erreur pendant le processus de démarrage de l'analyse du journal d'erreur.

Comment accélérer la vitesse de chargement de PS? Comment accélérer la vitesse de chargement de PS? Apr 06, 2025 pm 06:27 PM

La résolution du problème du démarrage lent Photoshop nécessite une approche à plusieurs volets, notamment: la mise à niveau du matériel (mémoire, lecteur à semi-conducteurs, CPU); des plug-ins désinstallés ou incompatibles; nettoyer régulièrement les déchets du système et des programmes de fond excessifs; clôture des programmes non pertinents avec prudence; Éviter d'ouvrir un grand nombre de fichiers pendant le démarrage.

Comment résoudre le problème du chargement lorsque le PS ouvre le fichier? Comment résoudre le problème du chargement lorsque le PS ouvre le fichier? Apr 06, 2025 pm 06:33 PM

Le bégaiement "Chargement" se produit lors de l'ouverture d'un fichier sur PS. Les raisons peuvent inclure: un fichier trop grand ou corrompu, une mémoire insuffisante, une vitesse du disque dur lente, des problèmes de pilote de carte graphique, des conflits de version PS ou du plug-in. Les solutions sont: vérifier la taille et l'intégrité du fichier, augmenter la mémoire, mettre à niveau le disque dur, mettre à jour le pilote de carte graphique, désinstaller ou désactiver les plug-ins suspects et réinstaller PS. Ce problème peut être résolu efficacement en vérifiant progressivement et en faisant bon usage des paramètres de performances PS et en développant de bonnes habitudes de gestion des fichiers.

Le chargement lent PS est-il lié à la configuration de l'ordinateur? Le chargement lent PS est-il lié à la configuration de l'ordinateur? Apr 06, 2025 pm 06:24 PM

La raison du chargement lent PS est l'impact combiné du matériel (CPU, mémoire, disque dur, carte graphique) et logiciel (système, programme d'arrière-plan). Les solutions incluent: la mise à niveau du matériel (en particulier le remplacement des disques à semi-conducteurs), l'optimisation des logiciels (nettoyage des ordures système, mise à jour des pilotes, vérification des paramètres PS) et traitement des fichiers PS. La maintenance ordinaire de l'ordinateur peut également aider à améliorer la vitesse d'exécution du PS.

Comment résoudre le problème du chargement lorsque PS montre toujours qu'il se charge? Comment résoudre le problème du chargement lorsque PS montre toujours qu'il se charge? Apr 06, 2025 pm 06:30 PM

La carte PS est "Chargement"? Les solutions comprennent: la vérification de la configuration de l'ordinateur (mémoire, disque dur, processeur), nettoyage de la fragmentation du disque dur, mise à jour du pilote de carte graphique, ajustement des paramètres PS, réinstaller PS et développer de bonnes habitudes de programmation.

Les exportations PDF peuvent-elles être exportées par lots par PS? Les exportations PDF peuvent-elles être exportées par lots par PS? Apr 06, 2025 pm 04:54 PM

Il existe trois façons d'exporter des PDF par lots sur PS: utilisez les fonctions d'action PS: enregistrer et ouvrir les fichiers et exporter des actions PDF, et exécuter des actions dans une boucle. À l'aide d'un logiciel tiers: utilisez des logiciels de gestion de fichiers ou des outils d'automatisation pour spécifier les dossiers d'entrée et de sortie et définir le format de nom de fichier. Utilisez des scripts: écrivez des scripts pour personnaliser la logique d'exportation par lots, mais des connaissances en programmation sont nécessaires.

Comment les plumes PS contrôlent-elles la douceur de la transition? Comment les plumes PS contrôlent-elles la douceur de la transition? Apr 06, 2025 pm 07:33 PM

La clé du contrôle des plumes est de comprendre sa nature progressive. Le PS lui-même ne fournit pas la possibilité de contrôler directement la courbe de gradient, mais vous pouvez ajuster de manière flexible le rayon et la douceur du gradient par plusieurs plumes, des masques correspondants et des sélections fines pour obtenir un effet de transition naturel.

See all articles