Versuchen Sie, Chrome auf dem Anaconda-Image zu installieren, die Erstellung dauert jedoch noch lange. Schneiden Sie daher nur den Chrome-Teil als separates Image aus. Ich habe mich gefragt, ob es einen gibt, aber ich habe herausgefunden, dass es einen Mechanismus namens Selenium Grid gibt, der WebDriver über die REST-API betreiben kann, also habe ich es versucht.
Ein Docker-Image, das Selenium Grid verwenden kann, ist offiziell freigegeben. Verwenden Sie dieses.
SeleniumHQ/docker-selenium: Docker images for Selenium Grid Server (Standalone, Hub, and Nodes).
Wenn Sie mehrere Browser verwenden möchten, müssen Sie Hub und Node jedes Browsers starten. Dieses Mal möchte ich es jedoch nur mit Chrome ausprobieren, also habe ich das Image von Standalone verwendet.
docker-compose.yml
version: "3"
services:
chrome:
image: selenium/standalone-chrome
ports:
- 4444:4444
volumes:
- /dev/shm:/dev/shm
Die REST-API wird an Port 4444 verfügbar gemacht. Die API für den Betrieb von WebDriver scheint "/ wd / hub" zu sein.
$ docker-compose up
Wenn Sie Selenium Grid aus Python verwenden möchten, verwenden Sie 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}')
Ich habe ein Skript geschrieben, das Google durchsucht und den Titel und die URL der Top-Ergebnisse anzeigt.
$ python3 main.py qiita
Qiita
https://qiita.com/
Recommended Posts