Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich Mozilla Firefox in Scrapy verwenden, um das Problem des Scannens des QR-Codes zum Anmelden zu lösen?

Wie kann ich Mozilla Firefox in Scrapy verwenden, um das Problem des Scannens des QR-Codes zum Anmelden zu lösen?

王林
王林Original
2023-06-22 21:50:16937Durchsuche

Für Crawler ist das Crawlen von Websites, die eine Anmeldung, einen Bestätigungscode oder einen Scan-Code erfordern, ein sehr problematisches Problem. Scrapy ist ein sehr einfach zu verwendendes Crawler-Framework in Python. Bei der Verarbeitung von Bestätigungscodes oder dem Scannen von QR-Codes zum Anmelden müssen jedoch einige besondere Maßnahmen ergriffen werden. Als gängiger Browser bietet Mozilla Firefox eine Lösung, die uns bei der Lösung dieses Problems helfen kann.

Das Kernmodul von Scrapy ist verdreht und unterstützt nur asynchrone Anfragen. Einige Websites müssen jedoch Cookies und Sitzungen verwenden, um angemeldet zu bleiben. Daher müssen wir Mozilla Firefox verwenden, um diese Probleme zu lösen.

Zuerst müssen wir den Mozilla Firefox-Browser und den entsprechenden Firefox-Treiber installieren, um ihn in Python verwenden zu können. Der Installationsbefehl lautet wie folgt:

pip install selenium

Dann müssen wir einige Einstellungen zur Datei „settings.py“ des Crawlers hinzufügen, um den Firefox-Browser zum Scannen des QR-Codes zum Anmelden zu verwenden. Hier ist eine Beispieleinstellung:

DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.cookies.CookiesMiddleware':700,
'scrapy_selenium.SeleniumMiddleware':800,
}

SELENIUM_DRIVER_NAME = 'firefox'
SELENIUM_DRIVER_EXECUTABLE_PATH = which('geckodriver')
SELENIUM_BROWSER_EXECUTABLE_PATH = '/usr/bin/firefox'

Wir können sie entsprechend unserem eigenen Betriebssystem und Firefox-Installationspfad festlegen.

Als nächstes müssen wir eine benutzerdefinierte Scrapy Spider-Klasse erstellen, um den Firefox-Browser darin zu verwenden. In dieser Klasse müssen wir einige Optionen für den Firefox-Browser festlegen, wie unten gezeigt:

from selenium import webdriver
from scrapy.selector import Selector
from scrapy.spiders import CrawlSpider
from scrapy.http import Request

class MySpider(CrawlSpider):
   name = 'myspider'

   def __init__(self):
      self.driver = webdriver.Firefox(executable_path='geckodriver', firefox_binary='/usr/bin/firefox')
      self.driver.set_window_size(1400, 700)
      self.driver.set_page_load_timeout(30)
      self.driver.set_script_timeout(30)

   def parse(self, response):
      # 网站首页处理代码
      pass

In dieser benutzerdefinierten Spider-Klasse haben wir die Klasse selenium.webdriver.Firefox verwendet, um ein Firefox-Browser-Controller-Objekt zu erstellen. Das Firefox-Browser-Controller-Objekt wird zum Öffnen der Homepage der Website verwendet und kann bei Bedarf auch andere Vorgänge ausführen.

Für Websites, die zum Anmelden das Scannen von QR-Codes erfordern, können wir den Firefox-Browser verwenden, um den QR-Code auf der Seite zu identifizieren und auf das Scanergebnis des QR-Codes zu warten. Mit Selenium können wir das Benutzerverhalten in Python simulieren, den QR-Code scannen und uns auf der Website anmelden. Der vollständige Anmeldecode zum Scannen des Codes lautet wie folgt:

def parse(self, response):
   self.driver.get(response.url)
   # 等待页面加载完成
   time.sleep(5)
   # 寻找二维码及其位置
   frame = self.driver.find_element_by_xpath('//*[@class="login-qr-code iframe-wrap"]//iframe')
   self.driver.switch_to.frame(frame)
   qr_code = self.driver.find_element_by_xpath('//*[@id="login-qr-code"]/img')
   position = qr_code.location
   size = qr_code.size

   while True:
      # 判断是否已经扫描了二维码,
      # 如果扫描了,登录,并跳出循环
      try:
         result = self.driver.find_element_by_xpath('//*[@class="login-qr-code-close"]')
         result.click()
         break
      except:
         pass

      # 如果没有扫描,等待并继续寻找
      time.sleep(5)


   # 登录后处理的代码
   pass

Im obigen Code verwenden wir zuerst die Methode self.driver.get(), um die Homepage der Website zu öffnen, und verwenden dann die Methode find_element_by_xpath(), um den QR zu finden Codeelement und ermitteln Sie dessen Position und Größe. Warten Sie dann in einer While-Schleife auf das Ergebnis des QR-Code-Scans. Wenn der QR-Code gescannt wurde, klicken Sie auf die Schaltfläche „Schließen“ und verlassen Sie die Schleife. Wenn kein Scan erfolgt, warten Sie 5 Sekunden und setzen Sie die Suche fort.

Wenn die Ergebnisse des QR-Code-Scans verfügbar sind, können wir unsere eigene Anmeldelogik ausführen. Die spezifische Verarbeitungsmethode hängt von der tatsächlichen Situation der Website ab.

Kurz gesagt: Wenn wir Scrapy für die Crawler-Entwicklung verwenden und auf eine Website stoßen, für die eine Anmeldung erforderlich ist, und die Website zum Anmelden einen Bestätigungscode oder Scancode verwendet, können wir dieses Problem mit der oben genannten Methode lösen. Mit den Browsern Selenium und Firefox können wir Benutzervorgänge simulieren, Anmeldeprobleme mit QR-Codes lösen und die erforderlichen Daten abrufen.

Das obige ist der detaillierte Inhalt vonWie kann ich Mozilla Firefox in Scrapy verwenden, um das Problem des Scannens des QR-Codes zum Anmelden zu lösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn