簡體   English   中英

如何使用PhantomJS和Selenium瀏覽頁面

[英]How to browse over a page using PhantomJS and Selenium

我在網頁上有一些DIV元素。 總共有30個具有以下類似結構的DIV塊:

 <div class="w-dyn-item"> <a href="/project/soft" class="jobs-wrapper no-line w-inline-block w-clearfix"> <div class="jobs-client"> <img data-qazy="true" src="https://global.com/test.jpg" alt="Soft" class="image-9"> <div style="background-color:#cd7f32" class="job-time">Level 1</div> </div> <div class="jobs-content w-clearfix"> <div class="w-clearfix"> <div class="text-block-19 w-condition-invisible">PROMO</div> <h3 class="job-title">Soft</h3> <img height="30" data-qazy="true" src="https://global.com/test.jpg" alt="Soft" class="image-15 w-hidden-main w-hidden-medium w-hidden-small"></div> <div class="div-block w-clearfix"> <div class="text-block-4">Italy</div> <div class="text-block-4 w-hidden-small w-hidden-tiny">AMB</div> <div class="text-block-4 w-hidden-small w-hidden-tiny">GTL</div> <div class="text-block-13">January 10, 2017</div><div class="text-block-14">End date:</div></div><div class="space small"></div><p class="paragraph-3">Text text text</p></div> </a> </div> 

我正在嘗試訪問a href並單擊鏈接。 但是,問題是我不能使用find_element_by_link_text ,因為鏈接文本不存在。 是否可以通過類class="jobs-wrapper no-line w-inline-block w-clearfix"訪問a href 當我使用find_element_by_class_name ,出現錯誤Message: {"errorMessage":"Compound class names not permitted","request

from selenium import webdriver
driver = webdriver.PhantomJS()
driver.set_window_size(1120, 550)
driver.get("https://myurl.com/")
driver.find_element_by_link_text("//a href").click()
print driver.current_url
driver.quit()

如果您唯一的要求是單擊帶有w-dyn-itema標簽內的標簽,則可以這樣做:

driver.find_element_by_class_name("w-dyn-item").find_element_by_tag_name("a").click()


要使用w-dyn-item類遍歷所有標簽->單擊其中a a->做某事->返回,執行以下操作:

tags = driver.find_elements_by_class_name("w-dyn-item")
for i in range(len(tags)):
    tag = driver.find_elements_by_class_name("w-dyn-item")[i]
    tag.find_element_by_tag_name("a").click()
    # Do what you want inside the page...
    driver.back()

當然,這里的關鍵是在完成內部頁面之后返回到根頁面。

您收到的錯誤是因為Selenium的find_element_by_class_name不支持多個類。
將CSS選擇器與find_elements_by_css_selector使用:

driver.find_elements_by_css_selector('.jobs-wrapper.no-line.w-inline-block.w-clearfix')

將選擇您想要的類的所有標簽,然后您可以遍歷它們並使用click()或任何其他想要的操作

編輯

在發表評論后,新的代碼段可幫助您完成所需的操作:

result = {}
urls = []
# 'elements' is a the list you previously obtained using the css selector
for element in elements:
    urls.append(element.get_attribute('href'))


# Now you can iterate over all extracted hrefs:
for url in urls:
    url_data = {}
    driver.get(url)
    field1 = driver.find_element_by_id('wanted_id_1')
    url_data['field1'] = field1
    field2 = driver.find_element_by_id('wanted_id_2')
    url_data['field2'] = field2
    result[url] = url_data

現在, result是結構類似於您想要的字典。

請注意, field1field2屬於WebElement類型,因此您可能首先需要對它們進行一些操作(提取屬性,文本等)。

另外,就個人而言,與BeautifulSoup一起調查請求 ,對於這種情況或將來的類似情況,它們可能比Selenium更適合。

要訪問並單擊a href ,可以使用以下代碼行:

driver.find_element_by_xpath("//div[@class='w-dyn-item']/a[@href='/project/soft']").click()

暫無
暫無

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

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