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)