输入后硒停止

时间:2018-10-25 23:34:18

标签: python selenium-webdriver

我是Python和Selenium编码的新手,但我想我已经明白了,尝试建立一些示例供我学习,我有两个问题, 首先,由于某种原因,我的代码在输入后停止,由于某种原因,它不会用于yalla()函数,

yallaurl = str(input('Your URL + ' + ""))
browser = webdriver.Chrome()
browser.get(yallaurl)
browser.maximize_window()
yalla()

其他然后这另一个问题是关于browser.find_element_by_xpath的,所以在我转到html文件并单击“复制xpath”后,我得到的是这样的东西:

/html/body/table[2]/tbody/tr/td/form/table[4]/tbody/tr[2]/td/table/tbody/tr[2]/td[2]

那么代码行如何工作?这是合法的吗?

def yalla():
        sleep(2)
    count = len(browser.find_elements_by_class_name('flyingCart'))
    email = browser.find_element_by_xpath('/html/body/table[2]/tbody/tr/td/form/table[4]/tbody/tr[2]/td/table/tbody/tr[2]/td[2]')
    for x in range(2, count):
        itemdesc[x] = browser.find_element_by_xpath(
            "/html/body/table[2]/tbody/tr/td/form/table[1]/tbody/tr[2]/td[2]/table/tbody/tr[x]/td[2]/a[1]/text()")
        priceper[x] = browser.find_element_by_xpath(
            "/html/body/table[2]/tbody/tr/td/form/table[1]/tbody/tr[2]/td[2]/table/tbody/tr[x]/td[5]/text()")
        amount[x] = browser.find_element_by_xpath(
            "/html/body/table[2]/tbody/tr/td/form/table[1]/tbody/tr[2]/td[2]/table/tbody/tr[x]/td[6]")
    browser.navigate().to('https://www.greeninvoice.co.il/app/documents/new#type=100')
    checklogininvoice()

2 个答案:

答案 0 :(得分:0)

是的,您的代码可以正常运行并且合法,但不建议这样做。 如前所述,绝对路径可以正常工作,但是如果只对HTML稍作更改,则绝对路径会损坏

参考:https://selenium-python.readthedocs.io/locating-elements.html

答案 1 :(得分:0)

首先,此代码令人困惑:

yallaurl = str(input('Your URL + ' + ""))

这基本上等同于:

yallaurl = input('Your URL: ')

是的,此代码是正确的:

browser.find_element_by_xpath('/html/body/table[2]/tbody/tr/td/form/table[4]/tbody/tr[2]/td/table/tbody/tr[2]/td[2]')

有关正确用法,请参阅docs。 这是此方法的建议用法:

from selenium.webdriver.common.by import By

driver.find_element(By.XPATH, '/html/body/table[2]/tbody/tr/td/form/table[4]/tbody/tr[2]/td/table/tbody/tr[2]/td[2]')

此代码将返回您选择的元素的对象。要打印元素本身的HTML,应该可以:

print(element.get_attribute('outerHTML'))

有关页面对象的更多信息,请参阅文档的this页面。


由于您尚未提供“ yalla”功能的代码,因此很难在那里诊断问题。