Tôi đang cố gắng viết điều kiện dự kiến của riêng mình. Những gì tôi cần ... Tôi có một khung nội tuyến. và tôi cũng có một hình ảnh trong đó. Tôi muốn tiếp tục xử lý khi hình ảnh của scr sẽ thay đổi. Những gì tôi đã làm:Python Selenium WebDriver. Viết điều kiện dự kiến của riêng tôi
class url_changed_condition(object):
'''
Checks whether url in iframe has changed or not
'''
def __init__(self, urls):
self._current_url, self._new_url = urls
def __call__(self, ignored):
return self._current_url != self._new_url
và sau đó trong đoạn code tôi có:
def process_image(self, locator, current_url):
try:
WebDriverWait(self.driver, 10).until(ec.presence_of_element_located((By.TAG_NAME, u"iframe")))
iframe = self.driver.find_element(*locator)
if iframe:
print "Iframe found!"
self.driver.switch_to_frame(iframe)
WebDriverWait(self.driver, 10).until(ec.presence_of_element_located((By.XPATH, u"//div")))
# WebDriverWait(self.driver, 10).until(
# url_changed_condition(
# (current_url, self.driver.find_element(By.XPATH, u"//a/img").get_attribute(u"src"))))
img_url = self.driver.find_element(By.XPATH, u"//a/img").get_attribute(u"src")
print img_url
self.search_dict[self._search_item].append(img_url)
self.driver.switch_to_default_content()
except NoSuchElementException as NSE:
print "iframe not found! {0}".format(NSE.msg)
except:
print "something went wrong"
import traceback
import sys
type_, value_, trace_ = sys.exc_info()
print type_, value_
print traceback.format_tb(trace_)
finally:
return current_url
Mã này hoạt động, nhưng trả về cùng url nhiều lần. Vấn đề là khi tôi bỏ ghi chú url_changed_condition
nó rơi xuống với TimeoutException
trong
(current_url, self.driver.find_element(By.XPATH, u"//a/img").get_attribute(u"src"))
Dòng dưới đây hoạt động tốt ... Tôi không hiểu.
bạn đang nói với tôi một cách chính xác những gì tôi đã biết. Câu trả lời của bạn chính xác là những gì tôi đã viết ở đây. Tôi cần 'self.driver.find_element (By.XPATH, u" // a/img "). Get_attribute (u" src ")' được gọi là mỗi 500 mili giây để so sánh giá trị trả về của nó với giá trị mà tôi đã có. Và khi chúng không bằng '__call __()' của tôi sẽ trả về 'True'. –
Tôi chỉ giải thích lý do tại sao bạn có 'TimeoutException', vì trong câu hỏi của bạn, bạn dường như không hiểu tại sao. Như tôi đã nói, vấn đề của bạn là bạn đang kiểm tra yếu tố sai (vì URL dường như không bao giờ thay đổi), hoặc khoảng thời gian chờ quá thấp. Hãy thử tăng nó lên hơn 10 giây. Một tùy chọn khác là kiểm tra trường hợp khác trong khung nội tuyến. Tôi không quen thuộc với trang web bạn đang thử nghiệm, vì vậy không thể giúp bạn thêm. – imiric
Tôi nhận được ở đây vì "Một sự trở lại thành công là cho loại ExpectedCondition là Boolean trả về true hoặc không null trả về giá trị cho tất cả các loại ExpectedCondition khác" Được viết khủng khiếp và làm cho hoàn toàn không có ý nghĩa .... – FoxMulder900