インタビューの要約11 - セレン面の質問についてのインタビューの要約11 - セレンフェイス質問について

転載:https://www.cnblogs.com/yoyoketang/p/10174938.html

インタビューの要約11 - セレンフェイス質問について

序文

インタビューウェブの自動化は、セレンはポジショニングに関連する質問を、セレンを依頼するバインドされている基本的な、最も基本的なも自動化されたので、インタビューは、要素の位置と不可分です。
言う募集要件見る前に「のみコピー&ペーストXPathは履歴書をキャストしませんが、」申請者の申請の面接の自動化機能は、コピー&ペーストの上にとどまることができない説明。
ここでも、自動化されたが、心に留めておくために、そして、学びたい:貧しいレコードの三世代、コピーは彼の人生を台無しに!

1.どのようにページ上の要素があるかどうかを判断するには?

これは、質問をし、そして3つの方法で存在する元素を決定するために悪いと言うことができます。

除いて...してみてください使用方法...

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))

方法2:この方法は、要素と要素のグループを定義

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))

(!強く推奨)方法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 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.スクリプトの安定性を向上させる方法

関連する同様の問題があり、「ユースケースは、多くの場合、動作不安定時に発生するが、それはこの時点で言うことです、次回は、ユースケースの安定性を向上させるために決して通じ、どのようにあるのでしょうか?」
「どのようにセレンスクリプトを改善するために、実行速度は?「」
どのように関係なく、低速または高速でネットワーク負荷の?セレン操作要素の成功率を保証します。」

あなたは要素を見つけることができれば、それは限り、このページがあまりにも変わっていないとして、位置決め方法は、何も問題で説明し、今日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.どのように動的な位置決め要素

動的な要素の2種類があります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