Essayez d'installer Chrome sur l'image Anaconda, mais la construction prend encore beaucoup de temps, alors découpez uniquement la partie Chrome en tant qu'image distincte. Quand je me demandais s'il y en avait un, j'ai découvert qu'il existe un mécanisme appelé Selenium Grid qui peut faire fonctionner WebDriver via l'API REST, alors je l'ai essayé.
Une image Docker qui peut utiliser Selenium Grid est officiellement publiée, alors utilisez-la.
SeleniumHQ/docker-selenium: Docker images for Selenium Grid Server (Standalone, Hub, and Nodes).
Si vous souhaitez utiliser plusieurs navigateurs, vous devez lancer respectivement Hub et Node de chaque navigateur, mais cette fois, je veux juste l'essayer avec Chrome, j'ai donc utilisé l'image de Standalone.
docker-compose.yml
version: "3"
services:
chrome:
image: selenium/standalone-chrome
ports:
- 4444:4444
volumes:
- /dev/shm:/dev/shm
L'API REST est exposée sur le port 4444.
L'API pour faire fonctionner WebDriver semble être / wd / hub
.
$ docker-compose up
Si vous souhaitez utiliser Selenium Grid depuis Python, utilisez selenium.webdriver.Remote
.
$ pip3 install selenium
main.py
import sys
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
def search(driver, query):
driver.get('https://google.com/')
q = driver.find_element_by_name('q')
q.send_keys(query)
q.submit()
r = driver.find_element_by_class_name('g').find_element_by_class_name('r')
title = r.find_element_by_tag_name('h3').text
url = r.find_element_by_tag_name('a').get_attribute('href')
return title, url
if __name__ == '__main__':
query = ' '.join(sys.argv[1:])
options = {
'command_executor': 'http://localhost:4444/wd/hub',
'desired_capabilities': DesiredCapabilities.CHROME,
}
with webdriver.Remote(**options) as driver:
title, url = search(driver, query)
print(f'{title}\n{url}')
J'ai écrit un script qui recherche Google et affiche le titre et l'URL des meilleurs résultats.
$ python3 main.py qiita
Qiita
https://qiita.com/
Recommended Posts