Skip to content

Commit 61171e3

Browse files
committed
对cracker进行调整,使其核心可以与driver独立运行
1 parent 9dbe674 commit 61171e3

File tree

1 file changed

+39
-39
lines changed

1 file changed

+39
-39
lines changed

server_core/cracker.py

Lines changed: 39 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
from selenium.webdriver.support import expected_conditions as EC
1111
from selenium.webdriver.common.action_chains import ActionChains
1212

13-
1413
from web_session import WebSession
1514

1615
reorder_list = [
@@ -71,24 +70,30 @@
7170

7271
class Cracker:
7372
DELAY = 5
74-
75-
def __init__(self, executable_path=None):
76-
options = webdriver.ChromeOptions()
77-
options.add_argument("--log-level=3")
78-
options.add_argument("--window-size=350,560")
79-
80-
self.driver = webdriver.Chrome(
81-
executable_path,
82-
options=options)
73+
CSS_SELECTOR_FULLBG_IMG = 'svg > defs > g[id=gt_fullbg_1] > g > image'
74+
CSS_SELECTOR_BG_IMG = 'svg > defs > g[id = gt_bg_1] > g > image'
75+
CSS_SELECTOR_GAP_IMG = 'a[target=_blank] > image'
76+
77+
def __init__(self, executable_path=None, no_selenium=False):
78+
if no_selenium:
79+
self.driver = None
80+
else:
81+
options = webdriver.ChromeOptions()
82+
options.add_argument("--log-level=3")
83+
options.add_argument("--window-size=350,560")
84+
85+
self.driver = webdriver.Chrome(
86+
executable_path,
87+
options=options)
8388
self.session = WebSession()
8489

85-
@staticmethod
86-
def __bytes2cvimg(content: bytes) -> np.ndarray:
90+
def download_img(self, img_url: str) -> np.ndarray:
91+
content = self.session.request_binary('GET', img_url)
8792
arr = np.asarray(bytearray(content), dtype=np.uint8)
8893
return cv2.imdecode(arr, cv2.IMREAD_UNCHANGED) # 'Load it as it is'
8994

9095
@staticmethod
91-
def __reorder_img(unordered_img: np.ndarray) -> np.ndarray:
96+
def reorder_img(unordered_img: np.ndarray) -> np.ndarray:
9297
reordered_img = np.zeros((unordered_img.shape[0], 260, *unordered_img.shape[2:]), np.uint8)
9398
x_upper = 0
9499
x_lower = 0
@@ -106,33 +111,25 @@ def __reorder_img(unordered_img: np.ndarray) -> np.ndarray:
106111

107112
return reordered_img
108113

109-
def __fetch_unordered_img(self, css_selector: str) -> np.ndarray:
110-
element = self.driver.find_element_by_css_selector(css_selector)
111-
img_url = element.get_attribute('href')
112-
unordered_img = self.__bytes2cvimg(self.session.request_binary('GET', img_url))
113-
# cv2.imshow('unordered_img', unordered_img)
114-
115-
return unordered_img
116-
117114
def load_url(self, url=None) -> int:
118115
if url is not None:
119116
self.driver.get(url)
120117
try:
121118
WebDriverWait(self.driver, self.DELAY).until(
122-
EC.presence_of_element_located(
123-
(
124-
By.CSS_SELECTOR,
125-
'svg > defs > g[id=gt_fullbg_1] > g > image[href], div[class=error-box] span[class]'
126-
)
127-
),
119+
EC.presence_of_element_located(
120+
(
121+
By.CSS_SELECTOR,
122+
f'{self.CSS_SELECTOR_FULLBG_IMG}, div[class=error-box] span[class]'
123+
)
124+
),
128125
)
129-
if not self.driver.find_elements_by_css_selector('svg > defs > g[id=gt_fullbg_1] > g > image[href]'):
126+
if not self.driver.find_elements_by_css_selector(self.CSS_SELECTOR_FULLBG_IMG):
130127
print("页面异常,即将自动重新刷新")
131128
return 1
132129

133130
WebDriverWait(self.driver, self.DELAY).until(
134131
EC.presence_of_element_located(
135-
(By.CSS_SELECTOR, 'svg > defs > g[id=gt_bg_1] > g > image[href]')
132+
(By.CSS_SELECTOR, self.CSS_SELECTOR_BG_IMG)
136133
)
137134
)
138135
print("页面正常加载完毕")
@@ -145,12 +142,15 @@ def refresh(self):
145142
self.driver.find_element_by_css_selector('div[class=error-box] span[class]').click()
146143

147144
def fetch_imgs(self) -> Tuple[np.ndarray, np.ndarray, np.ndarray]:
148-
unordered_fullbg_img = self.__fetch_unordered_img("svg > defs > g[id=gt_fullbg_1] > g > image")
149-
unordered_bg_img = self.__fetch_unordered_img("svg > defs > g[id = gt_bg_1] > g > image")
150-
gap_img = self.__fetch_unordered_img("a[target=_blank] > image")
145+
unordered_fullbg_img = self.download_img(
146+
self.driver.find_element_by_css_selector(self.CSS_SELECTOR_FULLBG_IMG).get_attribute('href'))
147+
unordered_bg_img = self.download_img(
148+
self.driver.find_element_by_css_selector(self.CSS_SELECTOR_BG_IMG).get_attribute('href'))
149+
gap_img = self.download_img(
150+
self.driver.find_element_by_css_selector(self.CSS_SELECTOR_GAP_IMG).get_attribute('href'))
151151

152-
reordered_fullbg_img = self.__reorder_img(unordered_fullbg_img)
153-
reordered_bg_img = self.__reorder_img(unordered_bg_img)
152+
reordered_fullbg_img = self.reorder_img(unordered_fullbg_img)
153+
reordered_bg_img = self.reorder_img(unordered_bg_img)
154154

155155
# cv2.imshow('reordered_fullbg_img', reordered_fullbg_img)
156156
# cv2.imshow('reordered_bg_img', reordered_bg_img)
@@ -179,22 +179,22 @@ def slide_slider(self, track, ratio):
179179
ActionChains(self.driver).click_and_hold(element).perform()
180180
assert (track[1][0], track[1][1], track[1][2]) == (0, 0, 0)
181181

182-
real_track = [(int(x*ratio), y) for x, y, _ in track]
182+
real_track = [(int(x * ratio), y) for x, y, _ in track]
183183

184184
actions = ActionChains(self.driver)
185185
for i in range(2, len(real_track), 1):
186186
actions.move_by_offset(
187-
xoffset=(real_track[i][0]-real_track[i-1][0]),
188-
yoffset=(real_track[i][1]-real_track[i-1][1]))
187+
xoffset=(real_track[i][0] - real_track[i - 1][0]),
188+
yoffset=(real_track[i][1] - real_track[i - 1][1]))
189189
actions.perform()
190190
time.sleep(0.6)
191191
ActionChains(self.driver).release().perform()
192192

193193
def test_slide_slider(self, distance, ratio):
194194
element = self.driver.find_element_by_css_selector('svg > g > g[transform][style]')
195195
ActionChains(self.driver).click_and_hold(element).perform()
196-
ActionChains(self.driver).\
197-
move_by_offset(xoffset=(distance*ratio), yoffset=0).\
196+
ActionChains(self.driver). \
197+
move_by_offset(xoffset=(distance * ratio), yoffset=0). \
198198
perform()
199199
time.sleep(1.0)
200200
ActionChains(self.driver).release().perform()

0 commit comments

Comments
 (0)