forked from NaiboWang/EasySpider
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
88 changed files
with
22,062 additions
and
27 deletions.
There are no files selected for viewing
1,525 changes: 1,525 additions & 0 deletions
1,525
.temp_to_pub/EasySpider_windows_x86/Code/easyspider_executestage.py
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,165 @@ | ||
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) | ||
|
Oops, something went wrong.