Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果按钮只有类型和值,如何使用Python在web表单上提交数据_Python_Selenium_Xpath_Css Selectors_Webdriverwait - Fatal编程技术网

如果按钮只有类型和值,如何使用Python在web表单上提交数据

如果按钮只有类型和值,如何使用Python在web表单上提交数据,python,selenium,xpath,css-selectors,webdriverwait,Python,Selenium,Xpath,Css Selectors,Webdriverwait,我有以下URL,我想从中传递一些产品编号并获取当前URL 表格上有 <form method="get" action="/search" accept-charset="utf-8"> <p> <span class="search-bar-input-wrapper"> <input type="search" name="keyphrase" id="search-bar-input" value="" autocompl

我有以下URL,我想从中传递一些产品编号并获取当前URL

表格上有

<form method="get" action="/search" accept-charset="utf-8">
  <p>
    <span class="search-bar-input-wrapper">
      <input type="search" name="keyphrase" id="search-bar-input" value="" autocomplete="off" autocorrect="off" autocapitalize="off" placeholder="γράψε τον όρο αναζήτησης">
      <span id="search-spinner" class="spinner"></span>
      <span class="icon clear-search hidden"></span>
    </span>
    <button type="submit" value="submit">
      Αναζήτηση
    </button>
  </p>
</form>


Αναζήτηση

我使用以下命令提交搜索参数

records = []
listings =[]

Users = ['Mozilla/5.0 (Linux; <Android Version>; <Build Tag etc.>) AppleWebKit/<WebKit Rev>(KHTML, like Gecko) Chrome/<Chrome Rev> Safari/<WebKit Rev>',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36']
RandomAgent = np.random.choice(Users)
opts = Options()
opts.add_argument("user-agent=["+RandomAgent+"]")
br = webdriver.Chrome('C:\\chromedriver.exe',options=opts)


def current_time():
    return datetime.datetime.now().strftime('%d-%m-%Y %H:%M')

def mycontents():
    contents = []
    with open('sku_list.csv', 'r',encoding='utf-8',newline='') as csvf:
        reader = csv.reader(csvf, delimiter=";")
        for row in reader:
            contents.append(row)  
        return contents


def get_the_link(myskus):

    br.get('https://www.skroutz.gr')
    for item in myskus:  
        search_url = br.find_element_by_id('search-bar-input')
        search_url.clear()
        search_url.send_keys(item) 
        WebDriverWait(br,5).until(EC.element_to_be_clickable((By.XPATH,'//button[@value="submit"]'))).click()
        records.append(br.current_url)
    return records
记录=[]
清单=[]
用户=['Mozilla/5.0(Linux;;)AppleWebKit/(KHTML,如Gecko)Chrome/Safari/',
“Mozilla/5.0(Macintosh;英特尔Mac OS X 10_11_6)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/53.0.2785.143 Safari/537.36”,
“Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/42.0.2311.135 Safari/537.36 Edge/12.246”,
'Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/47.0.2526.111 Safari/537.36']
RandomAgent=np.random.choice(用户)
opts=Options()
opts.add_参数(“用户代理=[“+RandomAgent+”]”)
br=webdriver.Chrome('C:\\chromedriver.exe',options=opts)
定义当前_时间():
return datetime.datetime.now().strftime(“%d-%m-%Y%H:%m”)
def mycontents():
内容=[]
将open('sku_list.csv','r',encoding='utf-8',newline='''作为csvf:
reader=csv.reader(csvf,分隔符=“;”)
对于读取器中的行:
contents.append(行)
返回内容
def获取链接(myskus):
得到https://www.skroutz.gr')
对于myskus中的项目:
search\u url=br.按\u id(“search-bar-input”)查找\u元素
搜索\u url.clear()
搜索url。发送密钥(项目)
WebDriverWait(br,5).until(EC.element可点击((By.XPATH,//button[@value=“submit”])。点击()
记录。追加(br.当前\u url)
退货记录
但是我得到一个错误,元素找不到

我如何提交表格


感谢您

WebDriverWait
元素设置为可点击的
()和xpath下面

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

for item in myskus:

   search_url = br.find_element_by_id('search-bar-input')
   search_url.clear()
   search_url.send_keys(item)
   WebDriverWait(br,10).until(EC.element_to_be_clickable((By.XPATH,'//button[@value="submit"]'))).click()
   records.append(br.current_url)

这是我尝试过的全部代码,它为我提供了输出

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
br=webdriver.Chrome()
br.get("https://www.skroutz.gr/")
myskus=['test','test1','abc']
records=[]
for item in myskus:

   search_url = br.find_element_by_id('search-bar-input')
   search_url.clear()
   search_url.send_keys(item)
   WebDriverWait(br,10).until(EC.element_to_be_clickable((By.XPATH,'//button[@value="submit"]'))).click()
   records.append(br.current_url)

print(records)
输出

['https://www.skroutz.gr/search?keyphrase=test', 'https://www.skroutz.gr/search?keyphrase=test1', 'https://www.skroutz.gr/search?keyphrase=abc']
要在文本为的元素上单击(),您必须诱导WebDriverWait使
元素可单击()
,并且您可以使用以下任一选项:

  • 使用XPATH 1和
    单击()

  • 使用XPATH 2和
    单击()

  • 使用XPATH 1和
    submit()

  • 使用XPATH 2和
    submit()

  • 注意:您必须添加以下导入:

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

我超时了exception@MariaGeorgali:不知道为什么它对您不起作用。但是您可以尝试使用
搜索url.submit()
而不是按钮单击。如果我使用搜索url.send键(item,keys.ENTER)是否不好?那么,为什么要避免使用非常有效且经过验证的
单击()
提交()
?最后,最重要的是让您的测试不受影响,即使我做了20到10次,url也会在我的工作场所被阻止。将在短时间内从家中提供工作解决方案;)
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//form[contains(@action, 'search')]//button[normalize-space()='Αναζήτηση']"))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//form[contains(@action, 'search')]//button[.,'Αναζήτηση']"))).submit()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//form[contains(@action, 'search')]//button[normalize-space()='Αναζήτηση']"))).submit()
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC