簡體   English   中英

如何在我的 oop python 代碼中實現選項?

[英]How can I implement options in my oop python code?

幫幫我,我不知道如何在我的 oop 代碼中實現選項,我不希望每次運行代碼時都會彈出瀏覽器,我必須添加無頭選項但我不知道如何

我確實知道如何在函數式或命令式范式中使我的代碼無頭,但我無法弄清楚如何在 oop 范式中實現這一點,無論我做什么,我都會遇到錯誤,我不知道該怎么做,我非常感謝誰引導我點亮我的代碼

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import os
os.environ["PATH"] = "C:\\SeleniumWebDrivers"

op = webdriver.ChromeOptions()
op.add_argument("--disable-blink-features=AutomationControlled")
op.add_argument("headless")

class Avamovie(webdriver.Opera(options=op)):
    def __init__(self, teardown=False):
        self.teardown = teardown
        super(Avamovie, self).__init__()
        self.implicitly_wait(15)
        self.maximize_window()
        self.minimize_window()
    def __exit__(self, exc_type, exc_val, exc_tb) -> None:
        if self.teardown:
            self.quit()

    def get_the_page(self):
        self.get("https://avamovie17.xyz")

    def search_box(self, title):
        sbox = self.find_element_by_css_selector("input[placeholder='جستجو']")
        sbox.send_keys(title)
        sbox.click()
        r = self.find_element_by_css_selector("ul[class='search_result_list']")
        r = r.find_element_by_tag_name("li").find_element_by_css_selector(
            "span[class='title']"
        )
        r.click()

    def download_links(self):
        links = self.find_elements_by_css_selector("a[href*='.mkv']")
        links = [link.get_attribute("href") for link in links]
        print(links)


with Avamovie() as scraper:
    scraper.get_the_page()
    scraper.search_box("A hero 2021")
    scraper.download_links()

我最新的錯誤:

Traceback (most recent call last):
  File "c:\Users\yasin\Desktop\pf\Projects\Selena\selena.py", line 1, in <module>
    from sites.avamovie import Avamovie
  File "c:\Users\yasin\Desktop\pf\Projects\Selena\sites\avamovie.py", line 10, in <module>
    class Avamovie(webdriver.Opera(options=op)):
  File "C:\Users\yasin\AppData\Roaming\Python\Python310\site-packages\selenium\webdriver\opera\webdriver.py", line 79, in __init__
    OperaDriver.__init__(self, executable_path=executable_path,
  File "C:\Users\yasin\AppData\Roaming\Python\Python310\site-packages\selenium\webdriver\opera\webdriver.py", line 55, in __init__
    ChromiumDriver.__init__(self,
  File "C:\Users\yasin\AppData\Roaming\Python\Python310\site-packages\selenium\webdriver\chrome\webdriver.py", line 73, in __init__
    self.service.start()
  File "C:\Users\yasin\AppData\Roaming\Python\Python310\site-packages\selenium\webdriver\common\service.py", line 71, in start
    cmd.extend(self.command_line_args())
  File "C:\Users\yasin\AppData\Roaming\Python\Python310\site-packages\selenium\webdriver\chrome\service.py", line 45, in command_line_args
    return ["--port=%d" % self.port] + self.service_args
TypeError: %d format: a real number is required, not dict

我會很感激任何幫助,謝謝大家

您似乎試圖從Opera實例繼承,而不是 class 本身。 選項被傳遞給對super().__init__的調用。

class Avamovie(webdriver.Opera):
    def __init__(self, options, teardown=False):
        self.teardown = teardown
        super(Avamovie, self).__init__(options)
        self.implicitly_wait(15)
        self.maximize_window()
        self.minimize_window()

    ...

with Avamovie(op) as scraper:
    scraper.get_the_page()
    scraper.search_box("A hero 2021")
    scraper.download_links()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM