-
-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Open
Description
你好,我使用自己的python代码来处理滑块,在本地直接执行python文件是可以成功执行的,但是我修改了一些代码后,放在任务中,出现_form这个元素为空的情况,有大佬可以帮我看看吗。
python代码如下:
sys.path.append("D:/study/CrackSlideCaptcha-cv/venv/Lib/site-packages")
import re
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
from urllib import request
import cv2
import random
import pyautogui
import time
def get_pos(imageSrc):
img = cv2.imread(imageSrc)
blurred = cv2.GaussianBlur(img,(5,5),0,0)
canny = cv2.Canny(blurred,0,100)
contours,hierarchy = cv2.findContours(canny,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
print(len(contours))
for contour in contours:
x,y,w,h = cv2.boundingRect(contour)
area = cv2.contourArea(contour)
perimeter = cv2.arcLength(contour,True)
if 5025 < area < 7225 and 300 < perimeter < 380:
x,y,w,h = cv2.boundingRect(contour)
cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),2)
cv2.imwrite('_bigImage.png',img)
return x
return 0
# options = webdriver.ChromeOptions()
# options.add_experimental_option("detach", True)
# driver_service = webdriver.ChromeService(r"D:\study\CrackSlideCaptcha-cv\chromedriver-win64\chromedriver.exe")
# browser = webdriver.Chrome(service=driver_service, options=options)
# url = 'https://accounts.douban.com'
# browser.get(url)
_screen = self.browser.find_element(By.CSS_SELECTOR,'#account')
_screenSize = _screen.size
passClick = self.browser.find_element(By.CSS_SELECTOR,'#account > div.login-wrap > div.login-right > div > div.account-body-tabs > ul.tab-start > li.account-tab-account')
passClick.click()
self.browser.implicitly_wait(200)
userInput = self.browser.find_element(By.CSS_SELECTOR,'#username').send_keys('xxx')
passInput = self.browser.find_element(By.CSS_SELECTOR,'#password').send_keys('xxx')
loginButton = self.browser.find_element(By.CSS_SELECTOR, '#account > div.login-wrap > div.login-right > div > div.account-tabcon-start > div.account-form > div.account-form-field-submit > a')
loginButton.click()
self.browser.implicitly_wait(5000)
self.browser.switch_to.frame('tcaptcha_iframe_dy')
_form = self.browser.find_element(By.XPATH, '//div[@id="tcWrap"]')
print(_form)
# self._form = self.browser.find_element(By.CSS_SELECTOR, '#tcWrap')
_formSize = _form.size
WebDriverWait(self.browser,10).until(EC.visibility_of_element_located((By.ID,'slideBg')))
bigImage = self.browser.find_element(By.ID, 'slideBg')
_style = bigImage.get_attribute('style')
_pic = 'background-image: url\(\"(.*?)\"\);'
bigImageSrc = re.findall(_pic, _style, re.S)[0]
request.urlretrieve(bigImageSrc,'bigImage.png')
dis = get_pos('bigImage.png')
smallImage = self.browser.find_element(By.CSS_SELECTOR,'#tcOperation > div.tc-fg-item.tc-slider-normal')
dis = int(dis * 340 / 672 - smallImage.location['x'])
self.browser.implicitly_wait(2000)
ActionChains(self.browser).click_and_hold(smallImage).perform()
i=0
moved=0
print(_screenSize)
print(_formSize)
_width = (_screenSize['width'] - _formSize['width']) / 2
_height = (_screenSize['height'] - _formSize['height']) / 2
print("鼠标开始位置x:{},y:{}".format(_width,_height))
while moved < dis:
x = random.randint(3,10)
moved+=x
ActionChains(self.browser).move_by_offset(xoffset=x,yoffset=0).perform()
# pyautogui.dragTo(_width + smallImage.location['x'], _height + smallImage.location['y'], button='left')
print("第{}次移动后,位置为{}".format(i,smallImage.location['x']))
i+=1
ActionChains(self.browser).release().perform()
任务截图如下:

Metadata
Metadata
Assignees
Labels
No labels