| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- from selenium.webdriver.chrome.options import Options
- from selenium.webdriver.common.keys import Keys
- from selenium.webdriver.common.action_chains import ActionChains
- from selenium import webdriver
- from selenium.webdriver.support.ui import WebDriverWait
- from selenium.webdriver.support import expected_conditions as EC
- from selenium.webdriver.common.by import By
- from selenium.common.exceptions import NoSuchElementException
- from selenium.common.exceptions import TimeoutException
- from selenium.common.exceptions import StaleElementReferenceException, InvalidSelectorException
- from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
- from selenium.webdriver.support.ui import Select
- from selenium.webdriver import ActionChains
- from selenium.webdriver.common.by import By
- import undetected_chromedriver as uc
- desired_capabilities = DesiredCapabilities.CHROME
- desired_capabilities["pageLoadStrategy"] = "none"
- class MyChrome(webdriver.Chrome):
- def __init__(self, *args, **kwargs):
- self.iframe_env = False # 现在的环境是root还是iframe
- super().__init__(*args, **kwargs) # 调用父类的 __init__
- def find_element(self, by=By.ID, value=None, iframe=False):
- # 在这里改变查找元素的行为
- if self.iframe_env:
- super().switch_to.default_content()
- self.iframe_env = False
- if iframe:
- # 获取所有的 iframe
- try:
- iframes = super().find_elements(By.CSS_SELECTOR, "iframe")
- except Exception as e:
- print(e)
- find_element = False
- # 遍历所有的 iframe 并点击里面的元素
- for iframe in iframes:
- # 切换到 iframe
- super().switch_to.default_content()
- super().switch_to.frame(iframe)
- self.iframe_env = True
- try:
- # 在 iframe 中查找并点击元素
- # 在这个例子中,我们查找 XPath 为 '//div[1]' 的元素
- element = super().find_element(by=by, value=value)
- find_element = True
- except:
- print("No such element found in the iframe")
- # 完成操作后切回主文档
- # super().switch_to.default_content()
- if find_element:
- return element
- if not find_element:
- raise NoSuchElementException
- else:
- return super().find_element(by=by, value=value)
- def find_elements(self, by=By.ID, value=None, iframe=False):
- # 在这里改变查找元素的行为
- if self.iframe_env:
- super().switch_to.default_content()
- self.iframe_env = False
- if iframe:
- # 获取所有的 iframe
- iframes = super().find_elements(By.CSS_SELECTOR, "iframe")
- find_element = False
- # 遍历所有的 iframe 并点击里面的元素
- for iframe in iframes:
- # 切换到 iframe
- try:
- super().switch_to.default_content()
- super().switch_to.frame(iframe)
- self.iframe_env = True
- # 在 iframe 中查找并点击元素
- # 在这个例子中,我们查找 XPath 为 '//div[1]' 的元素
- elements = super().find_elements(by=by, value=value)
- if len(elements) > 0:
- find_element = True
- # 完成操作后切回主文档
- # super().switch_to.default_content()
- if find_element:
- return elements
- except:
- print("No such element found in the iframe")
- if not find_element:
- raise NoSuchElementException
- else:
- return super().find_elements(by=by, value=value)
-
- class MyUCChrome(uc.Chrome):
- def __init__(self, *args, **kwargs):
- self.iframe_env = False # 现在的环境是root还是iframe
- super().__init__(*args, **kwargs) # 调用父类的 __init__
- def find_element(self, by=By.ID, value=None, iframe=False):
- # 在这里改变查找元素的行为
- if self.iframe_env:
- super().switch_to.default_content()
- self.iframe_env = False
- if iframe:
- # 获取所有的 iframe
- try:
- iframes = super().find_elements(By.CSS_SELECTOR, "iframe")
- except Exception as e:
- print(e)
- find_element = False
- # 遍历所有的 iframe 并点击里面的元素
- for iframe in iframes:
- # 切换到 iframe
- super().switch_to.default_content()
- super().switch_to.frame(iframe)
- self.iframe_env = True
- try:
- # 在 iframe 中查找并点击元素
- # 在这个例子中,我们查找 XPath 为 '//div[1]' 的元素
- element = super().find_element(by=by, value=value)
- find_element = True
- except:
- print("No such element found in the iframe")
- # 完成操作后切回主文档
- # super().switch_to.default_content()
- if find_element:
- return element
- if not find_element:
- raise NoSuchElementException
- else:
- return super().find_element(by=by, value=value)
- def find_elements(self, by=By.ID, value=None, iframe=False):
- # 在这里改变查找元素的行为
- if self.iframe_env:
- super().switch_to.default_content()
- self.iframe_env = False
- if iframe:
- # 获取所有的 iframe
- iframes = super().find_elements(By.CSS_SELECTOR, "iframe")
- find_element = False
- # 遍历所有的 iframe 并点击里面的元素
- for iframe in iframes:
- # 切换到 iframe
- try:
- super().switch_to.default_content()
- super().switch_to.frame(iframe)
- self.iframe_env = True
- # 在 iframe 中查找并点击元素
- # 在这个例子中,我们查找 XPath 为 '//div[1]' 的元素
- elements = super().find_elements(by=by, value=value)
- if len(elements) > 0:
- find_element = True
- # 完成操作后切回主文档
- # super().switch_to.default_content()
- if find_element:
- return elements
- except:
- print("No such element found in the iframe")
- if not find_element:
- raise NoSuchElementException
- else:
- return super().find_elements(by=by, value=value)
|