인터뷰 요약 (11) - 셀레늄 얼굴 질문에 대한 인터뷰 요약 (11) - 셀레늄 얼굴 질문에 대해

재판 : https://www.cnblogs.com/yoyoketang/p/10174938.html

인터뷰 요약 (11) - 셀레늄 얼굴 질문에 대해

머리말

인터뷰 웹 자동화는 셀레늄이 위치에 관련된 질문입니다 물어, 셀레늄을 물어 바인딩 된 인터뷰가 요소의 위치에서 분리 될 수 있도록, 또한 자동화 된 기본적인, 가장 기본적인.
말한다 채용 요구 사항을보고하기 전에 "만 복사 및 붙여 넣기 XPath는 이력서 캐스팅 않을 것"을 복사 및 붙여 넣기에있을 수 없어 신청인의 요청 면접관 자동화 기능을 설명했다.
다시 말하지만, 자동화는 염두에두고, 다음, 배우고 싶어요 : 가난한 기록의 세 세대, 복사 파괴 그의 인생은!

1. 어떻게 페이지에 요소가 있는지 여부를 확인하기 위해?

이것은 질문을하고, 세 가지 방법에 존재하는 요소를 결정하는 나쁜 말할 수있다 :

제외 ...하려고 사용하는 방법 ...

def is_element_exsist(driver, locator):
    ''' 判断元素是否存在,存在返回True,不存返回False :param locator: locator为元组类型,如("id", "yoyo") :return: bool值,True or False ''' try: driver.find_element(*locator) return True except Exception as msg: print("元素%s找不到:%s" % (locator, msg)) return False if __name__ == '__main__': loc1 = ("id", "yoyo") # 元素1 print(is_element_exsist(driver, loc1))

두 번째 방법 :이 방법은 요소 요소 그룹을 정의

def is_element_exsist1(driver, locator):
    ''' 判断元素是否存在,存在返回True,不存返回False :param locator: locator为元组类型,如("id", "yoyo") :return: bool值,True or False ''' eles = driver.find_elements(*locator) if len(eles) < 1: return False else: return True if __name__ == '__main__': loc1 = ("id", "yoyo") # 元素1 print(is_element_exsist1(driver, loc1))

(적극 추천!) 방법 세 : WebDriverWait 판단과 expected_conditions 결합

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait def is_element_exsist2(driver, locator): ''' 结合WebDriverWait和expected_conditions判断元素是否存在, 每间隔1秒判断一次,30s超时,存在返回True,不存返回False :param locator: locator为元组类型,如("id", "yoyo") :return: bool值,True or False ''' try: WebDriverWait(driver, 30, 1).until(EC.presence_of_element_located(locator)) return True except: return False if __name__ == '__main__': loc1 = ("id", "yoyo") # 元素1 print(is_element_exsist2(driver, loc1))

2. 스크립트의 안정성을 개선하는 방법

관련된 유사한 문제가있다 "사용 사례가 종종 작동이 불안정 중에 발생하는, 즉이 시간에 말을하는 것입니다, 다음 시간은 사용 사례의 안정성을 개선 할 수있는 방법을 통해, 방법이 있습니까?"
"어떻게 셀레늄 스크립트를 개선하기 위해 실행 속도는? ""
방법에 관계없이 느리거나 빠른 네트워크 부하? 셀레늄 운영 요소의 성공률을 보장합니다. "

당신이 요소를 찾을 수없는 경우, 한 페이지도 변경되지 않은 한, 위치 결정 방법은 아무것도 문제 설명, 오늘보다 이틀에 위치한다.
최적화 방향 : 1. (해당 경로 갤럭시 확실히 불안정) 바로 XPath를 복사하지 마십시오는 찾을 자신의 상대 경로, 다중 노드 ID를 쓰기
2. 문제를 찾습니다하지를, 두 번째 요인이 기다릴 것입니다, 수면 (실행 시간에 영향을 미치는) 가능한 한 적은 대기
driver.implicitly_wait(30)대기가 좋은 것은 전체, 일부 JS가 기다리고있을 때로드에 실패라고 생각하지 않습니다, 사용하지 않는, 그리고 점프 페이지가 인식 할 수없는 경우
3. 봉인 요소 방법을 찾아 결합 및 WebDriverWait expected_conditions 요소법을 결정하는 위치 결정 요소 방법 자체 패키지

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait def find(locator, timeout=30): '''定位元素,参数locator是元祖类型, 如("id", "yoyo")''' element = WebDriverWait(driver, timeout, 1).until(EC.presence_of_element_located(locator)) return element

3. 어떻게 동적 위치 요소

동적 요소 두 가지 종류가 있습니다 ID가 다음이 ID를 찾을 싶어 사용하지 않는 동적 위치 결정 시간 등이 호텔은 동적이다

<p id="yo" class="hello world">    
    <button id="yy_auto_1929292" name="heo" >登录</button> <br> </p>

예를 들어,이 버튼의 위의 요소, ID가, ID가, 위치가 이름을 지정할 수 있습니다 이유에 동적 위치 결정 방법 수천 죽은 수천 인
이 요소의 속성은 동적 경우에도 동적으로 레이블을하는 것은 불가능하고 부모 요소를 찾습니다 ID = "요"아 : .//*[@id='yo']/button

동적 상황은 속성 이름의 속도는 (태그 요소 위치 결정 소자 특성에있어서, F12에 따른 위치 결정 방법이 동일, 즉이 아래쪽 동안 산만 동적 요소 잠시 동안 페이지의 상단에있는 요소도있다 변경되지 않습니다, 유일한 클래스) 동적 속성 및 스타일 속성

4. 서브 요소의 부모 구성 요소를 통해 위치되는 방법

면접관은 내가이 문제에 자신의 인생을 보낼 때, 입사 지원자를 테스트하기 위해 덜 인기있는 위치의 일부에 참여 좋아합니까. 구체적으로는, 관련 정보를 위치 확인 방법을 발견 돌아온

이를 통해 부모 요소 셀레늄, 위치의 하위 요소는 요소는 차 위치 :. ele1 = driver.find_element_by_id ( "요요를 통해 찾을 수 있습니다 ") find_element_by_id ( "ziyuans")
하지만하지 않았다 생각하여이 하위 요소의 부모 요소를 찾기 전에 사실, 너무 프로세스를 제공 셀레늄을 참고

<p id="yo" class="hello world">
    <button id="yy_auto" name="heo" >登录</button> <br> </p>

虽然用parent方法定位到了父元素,但是无法获取元素属性,也不能操作,没搞懂有啥意义

另外一个思路,子元素定位父元素,可以通过xpath的语法直接定位:.//*[@name="heo"]/.. 两个点..就是代表父级元素了

5.如果截取某一个元素的图片,不要截取全部图片

可以参考之前写过的这篇:https://www.cnblogs.com/yoyoketang/p/7748693.html

# coding:utf-8
from selenium import webdriver
from PIL import Image
driver = webdriver.Chrome()
driver.get('http://www.baidu.com/')

driver.save_screenshot('button.png')
element = driver.find_element_by_id("su")
print(element.location)                # 打印元素坐标
print(element.size)                    # 打印元素大小 left = element.location['x'] top = element.location['y'] right = element.location['x'] + element.size['width'] bottom = element.location['y'] + element.size['height'] im = Image.open('button.png') im = im.crop((left, top, right, bottom)) im.save('button.png')

6.平常遇到过哪些问题?如何解决的

可以把平常遇到的元素定位的一些坑说下,然后说下为什么没定位到,比如动态id、有iframe、没加等待等因素
如何解决的--百度:上海-悠悠,上面都有解决办法

7.一个元素明明定位到了,点击无效(也没报错),如果解决?

使用js点击,selenium有时候点击元素是会失效

# js点击

js = 'document.getElementById("baidu").click()'
driver.execute_script(js)

추천

출처www.cnblogs.com/yuany66/p/11344929.html