# GPT + Selenium **Selenium** 可以直接控制瀏覽器來操作畫面上的元件,常用於動態爬蟲。 如果你花大錢買了 gpt plus,卻發現打 API 還得額外花錢(對,就是我),可以試看看以下的方法 **優點** 月費 20 USD 吃到飽 **缺點** 1小時內打太多資料會限制 45 分鐘 ## 準備 1. 去 [ChromeDriver](https://chromedriver.chromium.org/downloads) 下載對應chrome 的 driver (強烈建議你先更新到**最新版本** 的 chrome) + 如果用 linux 系統,[依照這個設置](https://www.jianshu.com/p/cbc01d32c7b0) + windows 點執行檔就好 + Mac 窩不知道... 2. 安裝套件 **selenium** 是動態爬蟲, **undetected-chromedriver** 是防止機器人偵測的特別版 ``` pip install selenium pip install undetected-chromedriver ``` ## Code **driver_path** 指定 chrome_driver 的位置,如果用 window 系統可以手動點 chrome_driver.exe 或是指定位置自動打開,linux 系統就不用指定了。 ```python from selenium.webdriver.remote.webdriver import By import undetected_chromedriver as uc from selenium.webdriver.common.keys import Keys class gptParser: def __init__(self, driver, gpt_url: str = 'https://chat.openai.com/'): """ ChatGPT parser Args: driver_path (str, optional): The path of the chromedriver. gpt_url (str, optional): The url of ChatGPT. """ # Start a webdriver instance and open ChatGPT self.driver = driver self.driver.get(gpt_url) @staticmethod def get_driver(driver_path: str = None,): return uc.Chrome() if driver_path is None else uc.Chrome(driver_path) def __call__(self, msg: str): # Find the input field and send a question input_field = self.driver.find_elements( By.TAG_NAME, 'textarea')[0] input_field.send_keys(msg) input_field.send_keys(Keys.RETURN) def read_respond(self): try: response = self.driver.find_elements(By.TAG_NAME, 'p')[-2].text return response except: return None def new_chat(self): self.driver.find_element(By.XPATH, '//a[text()="New chat"]').click() def close(self): self.driver.quit() ``` 執行後會自動開啟 gpt 網站,請自行登入 ```python driver = gptParser.get_driver() gpt_parser = gptParser(driver) ``` 登入後就能開始執行你的指令了,結果存在 response 變數 ```python query = "1+1=?" gpt_parser(query) # send the query time.sleep(1) response = gpt_parser.read_respond() # response = 2 ``` ## 小建議 + 限制 gpt 的回答成固定格式,例如 1 或 0 + min_wait, max_wait 建議在 1 秒以上,有時候會卡卡的