簡體   English   中英

如何根據HTML找到與文本“上載圖片”相關的上載按鈕?

[英]How to locate the upload button related to the text Upload Image as per the HTML?

我在Firefox上使用了Selenium(我嘗試過使用chrome,但此方法的成功率要低得多)。 我試圖找到一個元素(上載按鈕),成功率遠未達到可接受的百分比。

現在我知道我可以嘗試僅使用硒作為輸入,但是無論我做什么,它都無法找到它。 所以我在上傳部分使用了AutoIt。

frdriver.get('')
time.sleep(11)
try:
    # el = WebDriverWait(frdriver, 15).until(EC.presence_of_element_located((By.XPATH, '/html/body/div[1]/header/div[2]/div[2]/div/div/form/i[2]')))
    el = frdriver.find_element_by_xpath('/html/body/div[1]/header/div[2]/div[2]/div/div/form/i[2]')

    try:
        el.click()
        print(el)
        #ActionChains(frdriver).move_to_element(el).click().perform()
        try:
            #element = WebDriverWait(frdriver, 15).until(EC.presence_of_element_located((By.XPATH, '/html/body/div[1]/header/div[2]/div[2]/div/div/form/div[2]/div[3]/div[1]/div/div/div[1]')))

            element = frdriver.find_element_by_xpath('/html/body/div[1]/header/div[2]/div[2]/div/div/form/div[2]/div[3]/div[1]/div/div/div[1]')
            time.sleep(4)
            try:
                element.click()
                #ActionChains(frdriver).move_to_element(element).click().perform()
                autoit.run("/image.exe")
                r = 100
            except:
                print('Firefox retries upload')
                r += 1
        except:
            print('Firefox retries upload')
            r += 1
    except:
        print('Firefox retries upload')
        r += 1
except:
    print('Firefox retries upload')
    r += 1

如您所見,我嘗試了許多方法,每種方法幾乎都取得了相同的成功。 我正在使用遠程Windows機器來完成這項工作,這確實是我的主意,但是如果不將其最小化,它的效果會更好。

還有其他一些東西,由於某種原因,有時即使沒有成功單擊按鈕,它也會繞過try / except並繼續。

編輯頁面的html

<div class="ui-searchbar-keyword-panel ui-searchbar-keyword-hide ui-searchbar-static" style="z-index: 99; position: absolute; left: 0px; top: 35px;" data-widget-cid="widget-7">
    <div class="ui-searchbar-img-search-box">
        <div class="icbu-w-image-uploader-panel">
            <div class="icbu-w-image-uploader-content">
                <div class="upload-btn-wrapper">
                    <div class="upload-btn" data-spm-anchor-id="a2700.8293689.scGlobalHomeHeader.i1.2ce265aarlKA3D" style="z-index: 1;">Upload Image</div>
                    <div id="html5_1cjiqdvveht51pom1nbkqoiaop3_container" class="moxie-shim moxie-shim-html5" style="position: absolute; top: 14px; left: 224px; width: 109px; height: 28px; overflow: hidden; z-index: 0;">
                        <input id="html5_1cjiqdvveht51pom1nbkqoiaop3" type="file" style="font-size: 999px; opacity: 0; position: absolute; top: 0px; left: 0px; width: 100%; height: 100%;" multiple="" accept="image/jpeg,image/png,image/bmp">
                    </div>
                </div>
                <div class="response-text">Max 2MB per Image</div>
            </div>
        </div>
    </div>
    <div class="J-box-loadding-mask box-loadding-mask" data-role="loading" style="display: none;">
        <div class="mh-mamo-loadding-box">
            <i class="mh-mamo-icon-loadding"></i>
            <span class="J-loading-text mh-mamo-loadding-text">Loading...</span>
        </div>
    </div>
</div>

您應該使用driver.implicitly_wait(X)其中X是一個秒數,而不是使用重新發明輪子time.sleep和重試。 這將提高硒對頁面加載的容忍度,並且在查找頁面元素方面會獲得更好的成功。

要找到與文本“上載圖像”相關的上載按鈕 ,可以使用以下解決方案:

  • XPATH

     upload_button = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='upload-btn-wrapper']//div[@class='moxie-shim moxie-shim-html5' and starts-with(@id,'html5_')]/input[starts-with(@id,'html5_')]"))).click() 
  • CSS_SELECTOR

     upload_button = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.upload-btn-wrapper div.moxie-shim.moxie-shim-html5[id^='html5_']>input[id^='html5_']"))).click() 

注意 :您必須添加以下導入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM