https://www.codechef.com/ACMIND17/problems/STDDEV/Tôi đang cố gắng lấy đầu vào và đầu ra của câu hỏi sau bằng tập lệnh python nhưng tôi gặp phải lỗi sau
Selenium.common.Exceptions.NoSuchElementException: Thông báo: Không thể định vị phần tử: //pre/*[not(self::b)]
Bạn có thể dễ dàng nhận thấy rằng cả pre và b đều tồn tại trong mã nguồn và b là con của pre, thay vào đó tại sao lỗi này tôi chỉ cố gắng loại trừ thẻ b
từ trình quản trị web nhập khẩu selen
từ Khóa nhập Selenium.webdriver.common.keys
trình điều khiển = webdriver.Firefox()
driver.get('https://www.codechef.com/ACMIND17/problems/STDDEV/')
str=driver.find_element_by_xpath("//pre/*[not(self::b)]").text;
in(str);
Tôi mới bắt đầu học tất cả những điều này ngày hôm nay và tôi xin lỗi nếu nó hơi ngu ngốc
Thật không may, phương thức find_element của selen yêu cầu một phần tử làm giá trị trả về, vì vậy chúng tôi không thể sử dụng //pre/text()[1]
làm đầu vào hoặc //pre/text()[2]
cho đầu ra. Vì vậy, chúng tôi phải chuyển tiếp JavaScript để có được kết quả mong muốn.
Cách dễ dàng là sử dụng phương pháp trích xuất văn bản từ một vị trí nhất định trong phần tử. Bạn có thể sử dụng phương pháp này trong ứng dụng của mình vì vậy hãy ưu tiên phương pháp này.
Lưu ý: trong phương pháp nàyvăn bảnVị trí
Không có gì hơn một chỉ mục nút văn bản. Ví dụ: trong trường hợp này, giá trị đầu vào là nút văn bản đầu tiên và giá trị đầu ra là nút văn bản thứ hai.
def get_text_from_parent_by_postion(phần tử, textPosition=1):
trả về driver.execute_script(
""" var parent = đối số [0];
var textPosition = đối số [1];
var txtPosition = 0;
var child = parent.firstChild;
var textValue="";
trong khi(con) {
if (child.nodeType === 3){
if (txtPosition===textPosition){
textValue = child.textContent;
phá vỡ;
}}else{txtPosition+=1;}
con = child.nextSibling;
}
trả về giá trị văn bản;""",
phần tử, textPosition).strip()
Cách gọi nó trong trường hợp của bạn:
# đầu vào in
print(get_text_from_parent_by_postion(driver.find_element_by_tag_name("pre")),1))
#in đầu ra
print(get_text_from_parent_by_postion(driver.find_element_by_tag_name("pre")),2))
Về python - Selenium.common.Exceptions.NoSuchElementException: Thông báo: Không thể tìm thấy phần tử://pre/*[not(self::b)], chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/56176763/
Tôi là một lập trình viên xuất sắc, rất giỏi!