Ça n'a pas été très souvent que j'ai commencé à utiliser Selenium. J'écris une application WPF qui devrait rechercher automatiquement un livre sur ce site, puis représenter les résultats sur ListView. Tout va bien au début, le problème se pose quand je décide de chercher une seconde fois. Chaque fois qu'un appuyez sur le bouton de recherche que j'appelle la méthode Navigate() gotoUrl() de WebDriver, et après la première fois, si je presse à nouveau je reçois ceci:.C# sélénium SocketException lors de l'appel de ChromeDriver.Navigate()?
OpenQA.Selenium.WebDriverException: 'Unexpected error. System.Net.WebException: Impossible to connect with the remote server. ---> System.Net.Sockets.SocketException: Impossible to estabilish a connection. Persistent refusal of the computer 127.0.0.1:52601
in System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
in System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception)
--- Fine della traccia dello stack dell'eccezione interna ---
in System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
in System.Net.HttpWebRequest.GetRequestStream()
in OpenQA.Selenium.Remote.HttpCommandExecutor.Execute(Command commandToExecute)
in OpenQA.Selenium.Remote.DriverServiceCommandExecutor.Execute(Command commandToExecute)
C'est ma classe MainWindow, où tout est fait:
MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Input;
using System.Xml;
using System.IO;
using System.Net;
using System.Windows.Controls;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using System.Threading;
namespace MyLibrary
{
/// <summary>
/// Logica di interazione per MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
Catalog catalog;
List<Category> categories;
XmlDocument catalogXml;
string xmlPath;
ChromeDriver resultFinder;
Thread resultFinderThread;
string searchName;
struct ResultViewListItem
{
public string N { get; set; }
public string Result { get; set; }
}
public MainWindow()
{
InitializeComponent();
LoadCatalog();
LoadResultFinder();
}
private void LoadCatalog()
{
categories = new List<Category>();
xmlPath = "C:/Users/Andrea Ferrando/Documents/Visual Studio 2017/Projects/Andrea/MyLibrary/MyLibrary/Catalog/catalog.xml";
catalogXml = new XmlDocument();
catalogXml.Load(xmlPath);
foreach(XmlNode node in catalogXml.DocumentElement.ChildNodes)
{
categories = getCategories(categories, node);
}
catalog = new Catalog(categories, catalogXml, xmlPath);
}
private List<Category> getCategories(List<Category> categories, XmlNode node)
{
int number = Int32.Parse(node.Attributes["number"].Value);
string description = node.Attributes["description"].Value;
Category category = new Category(number, description, categories);
categories.Add(category);
if(node.HasChildNodes)
{
foreach (XmlNode child in node.ChildNodes)
{
category.Children = getCategories(category.Children, child);
}
return categories;
}
return categories;
}
private void LoadResultFinder()
{
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.AddArgument("--window-position=-32000,-32000");
ChromeDriverService chromeDriverService = ChromeDriverService.CreateDefaultService();
chromeDriverService.HideCommandPromptWindow = true;
resultFinder = new ChromeDriver(chromeDriverService, chromeOptions);
searchName = "";
}
private void Grid_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
if(e.Source.Equals(FindName("Search")))
{
TextBox textBox = (TextBox)FindName("SearchBox");
searchName = textBox.Text;
resultFinderThread = new Thread(new ThreadStart(findResults));
resultFinderThread.Start();
}
}
private void findResults()
{
using (resultFinder)
{
resultFinder.Navigate().GoToUrl("http://www.sbn.it/opacsbn/opac/iccu/free.jsp");
IWebElement inputField = resultFinder.FindElementByName("item:1016:Any");
inputField.SendKeys(searchName);
IWebElement submitField = resultFinder.FindElementByName("Invia");
submitField.Click();
IWebElement table = resultFinder.FindElementById("records");
IList<IWebElement> trElements = table.FindElements(By.TagName("tr"));
IList<IWebElement> tdElements;
List<string> information = new List<string>();
foreach (IWebElement trElement in trElements)
{
tdElements = trElement.FindElements(By.TagName("td"));
information.Add(tdElements[2].Text);
}
Dispatcher.Invoke(() =>
{
ListView listView = (ListView)FindName("ResultsList");
for (int i = 0; i < information.Count; i++)
{
listView.Items.Add(new ResultViewListItem { N = (i + 1).ToString(), Result = information[i] });
}
});
}
}
}
}
La méthode est importante FindResults() J'espère avoir été assez clair, merci à l'avance.
Merci beaucoup! Ça a vraiment marché !!! –