from pyvirtualdisplay import Display import undetected_chromedriver as uc from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from bs4 import BeautifulSoup import time import random import re import os class INTERFACING(): def __init__(self): self.driver_initialized = False self.driver = '' self.MAX_TRIALS = 2 # self.chrome_version = get_google_chrome_version() def make_soup(self): return BeautifulSoup(self.driver.page_source, 'lxml') # etree.HTML() def current_url(self): return self.driver.current_url def get_driver(self): # uc.TARGET_VERSION = get_google_chrome_version() chrome_options = uc.ChromeOptions() # chrome_options.add_argument("--headless") chrome_options.add_argument("--window-size=1920.,1080") chrome_options.add_argument("--disable-extensions") chrome_options.add_argument("--disable-dev-shm-usage") chrome_options.add_argument("--disable-popup-blocking") chrome_options.add_argument("--profile-directory=Default") chrome_options.add_argument("--ignore-certificate-errors") chrome_options.add_argument("--disable-plugins-discovery") chrome_options.add_argument("--incognito") chrome_options.add_argument("--no-first-run") chrome_options.add_argument("--no-service-autorun") chrome_options.add_argument("--no-default-browser-check") chrome_options.add_argument("--password-store=basic") chrome_options.add_argument("--no-sandbox") chrome_options.add_argument('--disable-application-cache') chrome_options.add_argument('--disable-gpu') chrome_options.add_argument("--disable-setuid-sandbox") chrome_options.add_argument( "user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36" ) self.driver = uc.Chrome(options=chrome_options, version_main="113") # self.browser = uc.Chrome(options=chrome_options, version_main=113) time.sleep(10) self.driver_initialized = True def close_driver(self): self.driver.quit() def get_selenium_response(self, url): # try: if not self.driver_initialized: self.get_driver() else: pass self.driver.get(url) time.sleep(3) soup = self.make_soup() return soup def get_page_source(self): return self.driver.page_source def clicking(self, xpath): elem = self.driver.find_element(By.XPATH, xpath) elem.click() time.sleep(random.randint(2, 3)) def entering_values(self, xpath, value): elem = self.driver.find_element(By.XPATH, xpath) elem.clear() elem.send_keys(value) time.sleep(random.randint(2, 4)) def send_keys(self, xpath): elem = self.driver.find_element(By.XPATH, xpath).send_keys(Keys.RETURN) def going_back(self): self.driver.execute_script("window.history.go(-1)") time.sleep(1) def refresh_page(self): self.driver.refresh() def close_handle(self): self.driver.close() def get_current_handle(self): return self.driver.current_window_handle def get_all_handles(self): return self.driver.window_handles def swtich_to_window(self, handle): self.driver.switch_to.window(handle) # def get_google_chrome_version(): # try: # search_pattern = "(\d+?)\." # chrome_version = os.popen("google-chrome -version").read() # chrome_version = re.search(search_pattern, chrome_version).group(1) # return chrome_version # except Exception as e: # raise Exception(f"获取google chrome的版本错误,详情:{e}") if __name__ == '__main__': url = r'https://www.cmde.org.cn/xwdt/index.html' with Display(visible=False, size=(1920, 1080)) as display: soup = INTERFACING().get_selenium_response(url) print(soup)