Skip to content

无法获取iframe中的元素 #941

@AllMyPrecious

Description

@AllMyPrecious

你好,我使用自己的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()

任务截图如下:

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions