From 214a8c6c7414f7a841a203011dfbbea530b7f9b7 Mon Sep 17 00:00:00 2001 From: Pyhtagodzilla <1670671958@qq.com> Date: Sat, 26 Jul 2025 10:39:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- run.py | 23 ++++++++--- test_profile.py | 4 ++ utils.py | 103 ++++++++++++++++++++++++++---------------------- 3 files changed, 76 insertions(+), 54 deletions(-) create mode 100644 test_profile.py diff --git a/run.py b/run.py index 752a384..6ca088b 100644 --- a/run.py +++ b/run.py @@ -1,13 +1,24 @@ import time +import selenium.common +from utils import Bing -from utils import init_driver_edge, init_driver_chrome -from utils import get_points +User_profile_chrome = ["chromium"] +User_profile_edge = ["User Data","User DataBM"] def main(): - driver = init_driver_chrome() - get_points(driver=driver) - time.sleep(10) - get_points(driver=driver) + for path in User_profile_edge: + try: + driver = Bing.init_driver_edge(path) + Bing.get_points(driver=driver) + time.sleep(10) + Bing.get_points(driver=driver) + time.sleep(10) + driver.quit() + print("quit") + + except selenium.common.exceptions.WebDriverException as e: + print(e) + if __name__ == "__main__": main() diff --git a/test_profile.py b/test_profile.py new file mode 100644 index 0000000..a7012c7 --- /dev/null +++ b/test_profile.py @@ -0,0 +1,4 @@ +from utils import Bing + +driver = Bing.init_driver_edge("User DataXL") +driver.get("https://www.bing.com/") diff --git a/utils.py b/utils.py index 27deb9e..5dc0bf3 100644 --- a/utils.py +++ b/utils.py @@ -1,58 +1,65 @@ from selenium import webdriver -def init_driver_edge(): - """Initialize the Selenium WebDriver with Edge edge_options. - Returns: - WebDriver: The initialized Selenium WebDriver instance. - """ - from selenium.webdriver.edge.service import Service - from selenium.webdriver.edge.options import Options - service = Service(r"D:\Projects\BUCT\edgedriver\msedgedriver.exe") - edge_options = Options() - # edge_options.add_argument("--headless") # Run in headless mode - edge_options.add_argument("--no-sandbox") - edge_options.add_experimental_option("detach", False) - edge_options.add_argument("--user-data-dir=C:\\Users\\Plane\\AppData\\Local\\Microsoft\\Edge\\User Data") - # edge_options.add_argument(r"user-data-dir=") - edge_options.add_argument("--profile-directory=Profile 1") - driver = webdriver.Edge(options=edge_options, service=service) - driver.implicitly_wait(5) # Implicit wait for elements to load - return driver -def init_driver_chrome(): - """Initialize the Selenium WebDriver with Chrome options. - Returns: - WebDriver: The initialized Selenium WebDriver instance. - """ - from selenium.webdriver.chrome.options import Options - from selenium.webdriver.chrome.service import Service +class Bing: - service = Service(executable_path="/usr/bin/chromedriver") - options = Options() - options.add_argument("--headless") # Run in headless mode - options.add_argument("--no-sandbox") - options.add_argument('--user-data-dir=/home/pythagodzilla/.config/chromium') - # options.add_experimental_option("detach", True) - driver = webdriver.Chrome(service=service, options=options) - driver.implicitly_wait(5) # Implicit wait for elements to load - return driver + @staticmethod + def init_driver_edge(profile_path: str): + """Initialize the Selenium WebDriver with Edge edge_options. + Returns: + WebDriver: The initialized Selenium WebDriver instance. + """ + from selenium.webdriver.edge.service import Service + from selenium.webdriver.edge.options import Options + service = Service(r"D:\Projects\BUCT\edgedriver\msedgedriver.exe") + edge_options = Options() + # edge_options.add_argument("--headless") # Run in headless mode + edge_options.add_argument("--no-sandbox") + edge_options.add_experimental_option("detach", False) + edge_options.add_argument(f"--user-data-dir=C:\\Users\\Plane\\AppData\\Local\\Microsoft\\Edge\\{profile_path}") + # edge_options.add_argument(f"--user-data-dir=C:\\Users\\Plane\\AppData\\Local\\Microsoft\\Edge\\User Data") + # edge_options.add_argument(r"user-data-dir=") + edge_options.add_argument("--profile-directory=Profile 1") + driver = webdriver.Edge(options=edge_options, service=service) + driver.implicitly_wait(5) # Implicit wait for elements to load + return driver -def get_points(driver) -> None: - """ - Open the rewards page and click all add-points elements. - """ - import time - from selenium.webdriver.common.by import By - driver.get( - "https://cn.bing.com/rewards/panelflyout?channel=bingflyout&partnerId=BingRewards&isDarkMode=0&ru=https%3A%2F%2Fcn.bing.com%2F") + @staticmethod + def init_driver_chrome(profile_path: str): + """Initialize the Selenium WebDriver with Chrome options. + Returns: + WebDriver: The initialized Selenium WebDriver instance. + """ + from selenium.webdriver.chrome.options import Options + from selenium.webdriver.chrome.service import Service - driver.maximize_window() + service = Service(executable_path="/usr/bin/chromedriver") + options = Options() + options.add_argument("--headless") # Run in headless mode + options.add_argument("--no-sandbox") + options.add_argument(f'--user-data-dir=/home/pythagodzilla/.config/{profile_path}') + # options.add_argument('--user-data-dir=/home/pythagodzilla/.config/chromium') + # options.add_experimental_option("detach", True) + driver = webdriver.Chrome(service=service, options=options) + driver.implicitly_wait(5) # Implicit wait for elements to load + return driver - cont = driver.find_elements(By.CLASS_NAME, "promo_cont") # 查找class:promo_cont。但对应多个可点击元素 + @staticmethod + def get_points(driver): + """ + Open the rewards page and click all add-points elements. + """ + import time + from selenium.webdriver.common.by import By + driver.get( + "https://cn.bing.com/rewards/panelflyout?channel=bingflyout&partnerId=BingRewards&isDarkMode=0&ru=https%3A%2F%2Fcn.bing.com%2F") - for i in cont: - if i.get_attribute('role') == 'banner' or i.get_attribute('id') == 'exclusive_promo_cont': - i.click() # 点击所有符合元素 + driver.maximize_window() + cont = driver.find_elements(By.CLASS_NAME, "promo_cont") # 查找class:promo_cont。但对应多个可点击元素 - time.sleep(10) # 等待页 面完全加载。 + for i in cont: + if i.get_attribute('role') == 'banner' or i.get_attribute('id') == 'exclusive_promo_cont': + i.click() # 点击所有符合元素 + + time.sleep(10) # 等待页 面完全加载。